【LOJ #3084】【GXOI / GZOI2019】—宝牌一大堆(DP)
传送门
首先把国士无双和七对子判掉
实际上可以发现杠根本没用
因为(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)相关推荐
- [GXOI/GZOI2019]宝牌一大堆(dp)
luogu bzoj 这个麻将题还算挺友善的,比隔壁zjoi的要好得多... 比较正常的做法是五维dp 但事实上六维dp也是完全不会被卡的 七对子选权值最高的七个,国士无双直接$13^2$暴力 ...
- 题解 P5301 【[GXOI/GZOI2019]宝牌一大堆】
这道题除了非常恶心以外也没有什么非常让人恶心的地方 当然一定要说有的话还是有的,就是这题和咱 ZJOI 的 mahjong 真的是好像的说~ 于是就想说这道题出题人应该被 锕 掉 noteskey 整 ...
- [GXOI/GZOI2019]宝牌一大堆
感觉比ZJOI的麻将要休闲很多啊. 这个题就是一个最优化问题,没有面子的特殊牌型可以直接用复杂度较低的贪心判掉. 有面子的话就是一个经典dp.(曾经还在ZJOI写过这个毒瘤东西 大概就是存一下对子,面 ...
- LOJ#3084. 「GXOI / GZOI2019」宝牌一大堆(递推)
题面 传送门 题解 为什么又是麻将啊啊啊!而且还是我最讨厌的爆搜类\(dp\)-- 首先国士无双和七对子是可以直接搞掉的,关键是剩下的,可以看成\(1\)个雀头加\(4\)个杠子或面子 直接\(dp\ ...
- 【GXOI/GZOI2019】宝牌一大堆(麻将DP)(贪心)
传送门 其实还有第三种麻将--四川麻将,规则和其他麻将都不太像,甚至在四川不同地区的规则也不一样. 而关于麻将胡牌的题,能够利用DP解决的,我们可以将这种技巧成为麻将DP 题解: 这篇题解里面用的是川 ...
- GXOI/GZOI2019题解
GXOI/GZOI2019题解 P5300 [GXOI/GZOI2019]与或和 一眼题.. 显然枚举每个二进制位,答案就变成了全1子矩阵数量. 这个xjb推推,单调栈一下就行了. #include& ...
- 【题解】Luogu-P5303 [GXOI/GZOI2019]逼死强迫症
P5303 [GXOI/GZOI2019]逼死强迫症 Preface 矩阵题的登峰造极之作. Description 有 TTT 组数据. 对于每组数据,给定正整数 NNN,请求出用 (N−1)(N- ...
- 【LOJ】#3086. 「GXOI / GZOI2019」逼死强迫症
LOJ#3086. 「GXOI / GZOI2019」逼死强迫症 这个就是设状态为\(S,j\)表示轮廓线为\(S\),然后用的1×1个数为j 列出矩阵转移 这样会算重两个边相邻的,只要算出斐波那契数 ...
- [GXOI/GZOI2019]旧词——树链剖分+线段树
题目链接: [GXOI/GZOI2019]旧词 对于$k=1$的情况,可以参见[LNOI2014]LCA,将询问离线然后从$1$号点开始对这个点到根的路径链修改,每次询问就是对询问点到根路径链查询即可 ...
最新文章
- Maven使用常用命令
- 9、 InnoDB行锁
- php ftp 创建文件夹失败,PHP使用FTP函数创建目录
- JS中捉摸不透的==(宽松等于)
- aws s3 python_Python 操作amazon s3 | 学步园
- Linux-获得命令帮助man
- 程序员为3万福利放弃30万年薪:贪小便宜的人,都把自己坑惨了
- 评估系统C语言答案,用C语言评估语句
- win7 操作mysql_win7系统如何设置Mysql密码保护数据库
- 对接融云记录几点问题
- Spring Cloud(Greenwich版)-02-服务注册与服务发现-Eureka入门
- java9之后,String为何从char类型数组转成byte类型数组
- Unity LitJson的读写使用
- 控制器Ryu+Mininet完成集线器、自学习交换机、流量监控实例开发
- Opengl ES之矩阵变换
- [办公应用]让WORD自动显示到四级目录
- 篇4:xShell连接ubuntu不成功
- 未来 3 年,什么样的技术人,最有机会年赚 100万?
- status_breakpoint谷歌浏览器如何解决?
- goproxy.io for Go modules
热门文章
- 为什么吃鸡显示连接不到服务器,为什么吃鸡进游戏显示连接不上 | 手游网游页游攻略大全...
- 获取Spring上下文(ApplicationContext)的三种方法
- 自学白帽黑客第二年总结
- 基于dtmf发送救援信息(gps坐标)传送的技术方案
- MacBook上virtualbox虚拟机获得和主机一样的IP网段(作为一台独立的机器使用,可以上网可以和主机相互ping通)
- Java数字加密(加密解密)
- Linux 命名管道 聊天室
- jQuery复习-(jQuery入门,jQuery语法(DOM),jQuery动画)
- bzoj2215: [Poi2011]Conspiracy
- 网易 七鱼 面试 java_reactJs微信端接入网易七鱼客服