UVA11210 Chinese Mahjong

链接

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2151

题解

爆搜题,没有任何剪枝
对每种情形枚举如何处理它的最小的牌,要么组成顺子,要么组成刻子
刘汝佳的思路:枚举深度(即3,2,1),枚举出牌方式,然后枚举牌

代码

//爆搜 
#include <iostream>
#include <algorithm>
#include <map>
#include <string>
#define maxpos 34
using namespace std;
int res[maxpos+10];
bool success;
map<string,int> table;
map<int,string> intable;
bool check_shun(int x)
{
    int i;
    if(1<=x and x<=7)return res[x] and res[x+1] and res[x+2];
    if(10<=x and x<=16)return res[x] and res[x+1] and res[x+2];
    if(19<=x and x<=25)return res[x] and res[x+1] and res[x+2];
    return false;
}
void make_table()
{
    table["1T"]=1;
    table["2T"]=2;
    table["3T"]=3;
    table["4T"]=4;
    table["5T"]=5;
    table["6T"]=6;
    table["7T"]=7;
    table["8T"]=8;
    table["9T"]=9;
    table["1S"]=10;
    table["2S"]=11;
    table["3S"]=12;
    table["4S"]=13;
    table["5S"]=14;
    table["6S"]=15;
    table["7S"]=16;
    table["8S"]=17;
    table["9S"]=18;
    table["1W"]=19;
    table["2W"]=20;
    table["3W"]=21;
    table["4W"]=22;
    table["5W"]=23;
    table["6W"]=24;
    table["7W"]=25;
    table["8W"]=26;
    table["9W"]=27;
    table["DONG"]=28;
    table["NAN"]=29;
    table["XI"]=30;
    table["BEI"]=31;
    table["ZHONG"]=32;
    table["FA"]=33;
    table["BAI"]=34;
    map<string,int>::iterator it;
    for(it=table.begin();it!=table.end();it++)intable[it->second]=it->first;
}
void dfs(int pos)
{
    int i;
    if(pos>maxpos)
    {
        for(i=1;i<=maxpos;i++)if(res[i])break;
        if(i>maxpos)success=1;
        return;
    }
    if(res[pos]==0){dfs(pos+1);return;}
    //顺子
    if(check_shun(pos))
    {
        for(i=pos;i<=pos+2;i++)res[i]--;
        dfs(pos);
        for(i=pos;i<=pos+2;i++)res[i]++;
        if(success)return;
    }
    //三连 
    if(res[pos]>=3)
    {
        res[pos]-=3;
        dfs(pos);
        res[pos]+=3;
        if(success)return;
    }
}
int main()
{
    int i, j, c, flag, cnt;
    make_table();
    string str;
    for(c=1;;c++)
    {
        for(i=1;i<=maxpos;i++)res[i]=0;
        for(i=1;i<=13 and str!="0";i++)cin>>str, res[table[str]]++;
        if(str=="0")return 0;
        printf("Case %d: ",c);
        flag=0;
        for(i=1;i<=maxpos;i++)
            if(res[i]<4)
            {
                res[i]++;
                success=0;
                for(j=1;j<=maxpos and !success;j++)
                    if(res[j]>=2)
                    {
                        res[j]-=2;
                        dfs(1);
                        res[j]+=2;
                    }
                res[i]--;
                if(success)
                { 
                    if(!flag)cout<<intable[i], flag=1;
                    else cout<<" "<<intable[i];
                }
            }
        if(!flag)cout<<"Not ready";
        cout<<endl;
    }
}
《RSMA与速率拆分在有限反馈通信系统中的MMSE基预编码实现》 本文将深入探讨RSMA(Rate Splitting Multiple Access)技术在有限反馈通信系统中的应用,特别是通过MMSE(Minimum Mean Square Error)基预编码进行的实现。速率拆分是现代多用户通信系统中一种重要的信号处理策略,它能够提升系统的频谱效率和鲁棒性,特别是在资源受限和信道条件不理想的环境中。RSMA的核心思想是将用户的数据流分割成公共和私有信息两部分,公共信息可以被多个接收器解码,而私有信息仅由特定的接收器解码。这种方式允许系统在用户间共享信道资源,同时保证了每个用户的个性化服务。 在有限反馈通信系统中,由于信道状态信息(CSI)的获取通常是有限且不精确的,因此选择合适的预编码技术至关重要。MMSE预编码是一种优化策略,其目标是在考虑信道噪声和干扰的情况下最小化期望平方误差。在RSMA中,MMSE预编码用于在发射端对数据流进行处理,以减少接收端的干扰,提高解码性能。 以下代码研究RSMA与MMSE预编码的结合以观察到如何在实际系统中应用RSMA的速率拆分策略,并结合有限的反馈信息设计有效的预编码矩阵。关键步骤包括: 1. **信道模型的建立**:模拟多用户MIMO环境,考虑不同用户之间的信道条件差异。 2. **信道反馈机制**:设计有限反馈方案,用户向基站发送关于信道状态的简化的反馈信息。 3. **MMSE预编码矩阵计算**:根据接收到的有限反馈信息,计算出能够最小化期望平方误差的预编码矩阵。 4. **速率拆分**:将每个用户的传输信息划分为公共和私有两部分。 5. **信号发射与接收**:使用预编码矩阵对信号进行处理,然后在接收端进行解码。 6. **性能评估**:分析系统吞吐量、误码率等性能指标,对比不同策略的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值