hdu4778 Gems Fight!
来源:互联网 发布:java策略模式实例 编辑:程序博客网 时间:2024/06/03 16:31
博弈+状态压缩。感觉其实更像是模拟整个操作过程,每一步都保证达到最优。
然后进行状态转移就好啦。
需要注意的是 数组开小了真的是什么错误都会报,T RE WA都可能出现。。
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int g,b,s;int dp[1<<21];int num[30][30];int has[10],now[10];int main(){ while(scanf("%d%d%d",&g,&b,&s)!=EOF) { if(g==0&&b==0&&s==0) break;memset(num,0,sizeof num); for(int i=0;i<b;i++) { int n; scanf("%d",&n); for(int j=0;j<n;j++) { int x; scanf("%d",&x); x--; num[i][x]++; } } dp[0]=0; for(int i=1;i<(1<<b);i++) { int ff=0; dp[i]=-1e9; memset(has,0,sizeof has); for(int j=0;j<b;j++) { if((i&(1<<j))==0) { for(int k=0;k<g;k++) { has[k]+=num[j][k]; while(has[k]>=s) { has[k]-=s; } } } } for(int j=0;j<b;j++) { int ff=0; if(i&(1<<j)) { for(int k=0;k<g;k++) { now[k]=has[k]; } for(int k=0;k<g;k++) { now[k]+=num[j][k]; while(now[k]>=s) { now[k]-=s; ff++; } } if(ff>0) dp[i]=max(dp[i],ff+dp[i^(1<<j)]); else dp[i]=max(dp[i],-dp[i^(1<<j)]); } } }printf("%d\n",dp[(1<<b)-1]); } return 0;}
0 0
- HDU4778 Gems Fight!
- hdu4778 Gems Fight!
- hdu4778 Gems Fight!
- 【HDU4778】Gems Fight!-状态压缩DP+博弈
- HDU4778 Gems Fight!(记忆化搜索+博弈)
- hdu 4778 Gems Fight!
- hdu 4778Gems Fight!
- HDU 4778 Gems Fight!
- HDU 4778 Gems Fight!
- HDOJ 4778 Gems Fight!
- hdu 4778 Gems Fight!
- HDU 4778 Gems Fight!
- hdu 4778 Gems Fight!
- hdu 4778 Gems Fight!
- HDU-4778 Gems Fight!
- HDU 4778 Gems Fight!
- HDU 4778 Gems Fight!(dp)
- hdu 4778 Gems Fight!(状压+博弈)
- 【JAVA】+ 封装 + 父类~子类~继承
- a
- 输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。
- [game]暴雪游戏中的多样性日常系统
- 工欲善其事——eclipse的安装
- hdu4778 Gems Fight!
- oj第九周练习 统计出其中英文字母、数字、空格和其他字符的个数
- 图片的缓存
- 线性顺序表
- CSS基础-样式类型
- 软件测试
- dataTables 获取表格数据及选中行数据
- u盘安装mac系统 (2016最新)
- 为什么开始写博客