第一次写状压dp……

题意:http://blog.csdn.net/dyx404514/article/details/15506601

状压dp+博弈吧……

#include<iostream>
#include<map>
#include<string>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
int dp[2100000];
int bag[21][8];
int g,b,s;
int dfs(int state,int *remain,int all)
{
int t[8];
int i,sum,j;
if(state==0||all==0)
return 0;
if(dp[state]!=-1)
return dp[state];
for(i=0;i<b;i++)
{
if((state>>i)&1)
{
sum=0;
for(j=0;j<g;j++)
{
t[j]=bag[i][j]+remain[j];
sum+=t[j]/s;
t[j]%=s;
}
if(sum)
{
if(dp[state]==-1)
dp[state]=sum+dfs(state^(1<<i),t,all-sum);
else
dp[state]=max(dp[state],sum+dfs(state^(1<<i),t,all-sum));
}
else
{
if(dp[state]==-1)
dp[state]=all-dfs(state^(1<<i),t,all);
else
dp[state]=max(dp[state],all-dfs(state^(1<<i),t,all));
}
}
}
return dp[state];
}
int main()
{
int i,j,t,n,sum;
int remain[8];
while(scanf("%d%d%d",&g,&b,&s)&&g||b||s)
{
memset(bag,0,sizeof(bag));
for(i=0;i<b;i++)
{
scanf("%d",&n);
while(n--)
{
scanf("%d",&t);
bag[i][t-1]++;
}
}
sum=0;
for(i=0;i<g;i++)
{
t=0;
for(j=0;j<b;j++)
t+=bag[j][i];
sum+=t/s;
}
memset(dp,-1,sizeof(dp));
memset(remain,0,sizeof(remain));
printf("%d\n",2*dfs((1<<b)-1,remain,sum)-sum);
}
return 0;
}

最新文章

  1. jQuery介绍 DOM对象和jQuery对象的转换与区别
  2. js串讲回顾
  3. 如何查看eclipse或Myeclipse的版本号
  4. PHP集成支付宝快速实现充值功能
  5. CocoaPods使用命令
  6. PL/SQL 访问网页(get or post方式)
  7. Java基本类型与包装类
  8. hdu3415:最大k子段和,单调队列
  9. ActiveX异步回调JavaScript
  10. 【转】LINUX下一款不错的网站压力测试工具webbench
  11. 阅读《大道至简第一章》读后感(java伪代码)
  12. 『OGG 03』Win7 配置 Oracle GoldenGate 一次性成功(包括Adapter Java)
  13. EF获取多个数据集以及MySQL分页数据查询优化
  14. 【记录】Windows 操作系统常用快捷命令
  15. Beta(1/7)
  16. 如何学习sss和前端数据处理
  17. hihoCoder #1457 : 后缀自动机四&#183;重复旋律7(后缀自动机 + 拓扑排序)
  18. [Vuex] Create a Vuex Store using TypeScript
  19. 54.超大数据快速导入MySQL
  20. SQL里执行CLR c#代码

热门文章

  1. C3P0连接池参数配置说明
  2. 时间戳显示格式为几天前、几分钟前、几秒前---vue过滤器
  3. 2019年,Linux运维行业的趋势,跟不上学习就被淘汰
  4. luogu 4884 多少个1?
  5. 1 SQL 数据库和SQL
  6. socketserver模块使用方法
  7. Python之面向对象新式类和经典类
  8. 2. Java中的垃圾收集 - GC参考手册
  9. angular(转)
  10. 九度oj 题目1525:子串逆序打印