传送门


首先把国士无双和七对子判掉

实际上可以发现杠根本没用
因为(43)>(44)∗2{4\choose 3}>{4\choose 4}*2(34​)>(44​)∗2

设f[i][j][k][l][0/1]f[i][j][k][l][0/1]f[i][j][k][l][0/1]
表示前iii种,已经凑出jjj个面子,有k,lk,lk,l个从i−1,i−2i-1,i-2i−1,i−2开始凑的顺子,是否有雀头
枚举当前选择新凑几个顺子,凑刻子,雀头
随便乱dpdpdp一下就完了

#include<bits/stdc++.h>
using namespace std;
const int RLEN=1<<20|1;
inline char gc(){static char ibuf[RLEN],*ib,*ob;(ob==ib)&&(ob=(ib=ibuf)+fread(ibuf,1,RLEN,stdin));return (ob==ib)?EOF:*ib++;
}
#define gc getchar
inline int read(){char ch=gc();int res=0,f=1;while(!isdigit(ch))f^=ch=='-',ch=gc();while(isdigit(ch))res=(res+(res<<2)<<1)+(ch^48),ch=gc();return f?res:-res;
}
#define ll long long
#define re register
#define pii pair<int,int>
#define fi first
#define se second
#define pb push_back
#define cs const
#define bg begin
#define poly vector<int>
inline void chemx(ll &a,ll b){a<b?a=b:0;}
inline void chemn(int &a,int b){a>b?a=b:0;}
cs int N=40;
int a[N],b[N],n;
char s[5];
int tot;
ll q[N],f[N][5][3][3][2],c[5][5],ans;
inline void calc_qdz(){for(int i=1;i<=tot;i++)q[i]=0;tot=0;ll res=7;for(int i=1;i<=34;i++)if(a[i]>=2)q[++tot]=c[a[i]][2]*max(1,b[i]<<2);if(tot<7)res=0;sort(q+1,q+tot+1,greater<int>());for(int i=1;i<=7;i++)res*=q[i];chemx(ans,res);
}
int gp[14]={0,1,9,10,18,19,27,28,29,30,31,32,33,34};
inline void calc_gsws(){ll res=0;for(int i=1;i<=13;i++){if(a[gp[i]]<2)continue;ll tmp=1;for(int j=1;j<=13;j++){if(i==j)tmp*=c[a[gp[i]]][2]*max(1,b[gp[j]]<<2);else tmp*=c[a[gp[j]]][1]*max(1,b[gp[j]]<<1);}chemx(res,tmp);}chemx(ans,res*13);
}
inline void calc_342(){memset(f,0,sizeof(f));f[1][0][0][0][0]=1;for(int i=1;i<=34;i++){for(int j=0;j<=4;j++){for(int k=0;k<=2&&j+k<=4;k++){if(k&&(i==10||i==19||i>=28))break;for(int l=0;l<=2&&j+k+l<=4;l++){if(l&&(i==10||i==19||i>=28))break;for(int p=0;p<=a[i]-k-l&&j+p<=4;p++){int u=k+l+p;for(int o=0;o<=1;o++)chemx(f[i+1][j+l][p][k][o],f[i][j][k][l][o]*c[a[i]][u]*max(1,b[i]<<u));if(k+p+l<=a[i]-3&&j+l+1<=4){u=k+l+p+3;for(int o=0;o<=1;o++)chemx(f[i+1][j+l+1][p][k][o],f[i][j][k][l][o]*c[a[i]][u]*max(1,b[i]<<u));}if(k+p+l<=a[i]-2){u=l+k+p+2;chemx(f[i+1][j+l][p][k][1],f[i][j][k][l][0]*c[a[i]][u]*max(1,b[i]<<u));}}}}}}chemx(ans,f[35][4][0][0][1]);
}
inline void solve(){for(int i=1;i<=34;i++)a[i]=4,b[i]=0;ans=0;while(1){scanf("%s",s+1);if(strlen(s+1)==1){if(s[1]=='0')break;switch (s[1]){case 'E':a[28]--;break;case 'S':a[29]--;break;case 'W':a[30]--;break;case 'N':a[31]--;break;case 'Z':a[32]--;break;case 'B':a[33]--;break;case 'F':a[34]--;break;}}else{switch (s[2]){case 'm':a[s[1]-'0']--;break;case 'p':a[s[1]-'0'+9]--;break;case 's':a[s[1]-'0'+18]--;break;}}}while(1){scanf("%s",s+1);if(strlen(s+1)==1){if(s[1]=='0')break;switch (s[1]){case 'E':b[28]++;break;case 'S':b[29]++;break;case 'W':b[30]++;break;case 'N':b[31]++;break;case 'Z':b[32]++;break;case 'B':b[33]++;break;case 'F':b[34]++;break;}}else{switch (s[2]){case 'm':b[s[1]-'0']++;break;case 'p':b[s[1]-'0'+9]++;break;case 's':b[s[1]-'0'+18]++;break;}}}calc_qdz();calc_gsws();calc_342();cout<<ans<<'\n';
}
inline void init(){for(int i=0;i<=4;i++){c[i][0]=c[i][i]=1;for(int j=1;j<i;j++)c[i][j]=c[i-1][j-1]+c[i-1][j];}
}
int main(){int T=read();init();while(T--)solve();
}

【LOJ #3084】【GXOI / GZOI2019】—宝牌一大堆(DP)相关推荐

  1. [GXOI/GZOI2019]宝牌一大堆(dp)

    luogu     bzoj 这个麻将题还算挺友善的,比隔壁zjoi的要好得多... 比较正常的做法是五维dp 但事实上六维dp也是完全不会被卡的 七对子选权值最高的七个,国士无双直接$13^2$暴力 ...

  2. 题解 P5301 【[GXOI/GZOI2019]宝牌一大堆】

    这道题除了非常恶心以外也没有什么非常让人恶心的地方 当然一定要说有的话还是有的,就是这题和咱 ZJOI 的 mahjong 真的是好像的说~ 于是就想说这道题出题人应该被 锕 掉 noteskey 整 ...

  3. [GXOI/GZOI2019]宝牌一大堆

    感觉比ZJOI的麻将要休闲很多啊. 这个题就是一个最优化问题,没有面子的特殊牌型可以直接用复杂度较低的贪心判掉. 有面子的话就是一个经典dp.(曾经还在ZJOI写过这个毒瘤东西 大概就是存一下对子,面 ...

  4. LOJ#3084. 「GXOI / GZOI2019」宝牌一大堆(递推)

    题面 传送门 题解 为什么又是麻将啊啊啊!而且还是我最讨厌的爆搜类\(dp\)-- 首先国士无双和七对子是可以直接搞掉的,关键是剩下的,可以看成\(1\)个雀头加\(4\)个杠子或面子 直接\(dp\ ...

  5. 【GXOI/GZOI2019】宝牌一大堆(麻将DP)(贪心)

    传送门 其实还有第三种麻将--四川麻将,规则和其他麻将都不太像,甚至在四川不同地区的规则也不一样. 而关于麻将胡牌的题,能够利用DP解决的,我们可以将这种技巧成为麻将DP 题解: 这篇题解里面用的是川 ...

  6. GXOI/GZOI2019题解

    GXOI/GZOI2019题解 P5300 [GXOI/GZOI2019]与或和 一眼题.. 显然枚举每个二进制位,答案就变成了全1子矩阵数量. 这个xjb推推,单调栈一下就行了. #include& ...

  7. 【题解】Luogu-P5303 [GXOI/GZOI2019]逼死强迫症

    P5303 [GXOI/GZOI2019]逼死强迫症 Preface 矩阵题的登峰造极之作. Description 有 TTT 组数据. 对于每组数据,给定正整数 NNN,请求出用 (N−1)(N- ...

  8. 【LOJ】#3086. 「GXOI / GZOI2019」逼死强迫症

    LOJ#3086. 「GXOI / GZOI2019」逼死强迫症 这个就是设状态为\(S,j\)表示轮廓线为\(S\),然后用的1×1个数为j 列出矩阵转移 这样会算重两个边相邻的,只要算出斐波那契数 ...

  9. [GXOI/GZOI2019]旧词——树链剖分+线段树

    题目链接: [GXOI/GZOI2019]旧词 对于$k=1$的情况,可以参见[LNOI2014]LCA,将询问离线然后从$1$号点开始对这个点到根的路径链修改,每次询问就是对询问点到根路径链查询即可 ...

最新文章

  1. Maven使用常用命令
  2. 9、 InnoDB行锁
  3. php ftp 创建文件夹失败,PHP使用FTP函数创建目录
  4. JS中捉摸不透的==(宽松等于)
  5. aws s3 python_Python 操作amazon s3 | 学步园
  6. Linux-获得命令帮助man
  7. 程序员为3万福利放弃30万年薪:贪小便宜的人,都把自己坑惨了
  8. 评估系统C语言答案,用C语言评估语句
  9. win7 操作mysql_win7系统如何设置Mysql密码保护数据库
  10. 对接融云记录几点问题
  11. Spring Cloud(Greenwich版)-02-服务注册与服务发现-Eureka入门
  12. java9之后,String为何从char类型数组转成byte类型数组
  13. Unity LitJson的读写使用
  14. 控制器Ryu+Mininet完成集线器、自学习交换机、流量监控实例开发
  15. Opengl ES之矩阵变换
  16. [办公应用]让WORD自动显示到四级目录
  17. 篇4:xShell连接ubuntu不成功
  18. 未来 3 年,什么样的技术人,最有机会年赚 100万?
  19. status_breakpoint谷歌浏览器如何解决?
  20. goproxy.io for Go modules

热门文章

  1. 为什么吃鸡显示连接不到服务器,为什么吃鸡进游戏显示连接不上 | 手游网游页游攻略大全...
  2. 获取Spring上下文(ApplicationContext)的三种方法
  3. 自学白帽黑客第二年总结
  4. 基于dtmf发送救援信息(gps坐标)传送的技术方案
  5. MacBook上virtualbox虚拟机获得和主机一样的IP网段(作为一台独立的机器使用,可以上网可以和主机相互ping通)
  6. Java数字加密(加密解密)
  7. Linux 命名管道 聊天室
  8. jQuery复习-(jQuery入门,jQuery语法(DOM),jQuery动画)
  9. bzoj2215: [Poi2011]Conspiracy
  10. 网易 七鱼 面试 java_reactJs微信端接入网易七鱼客服