HDU 4317 状压DP
来源:互联网 发布:软件数据保密协议 编辑:程序博客网 时间:2024/06/05 14:44
本来好好的在做数位DP专题,结果冒出这么一题害我懵逼了一下,跟数位DP有个蛋关系啊!虽然说确实跟数位和DP都有点关系。。。
题目大意:
n(n<=10)堆石子,1<=石子数<=1e6,你现在可以向任意堆随意加任意数量石子,但不能增加堆数,问最少加多少石子可以变成先手必败态
思路:
考虑到会进位,所以从低位到高位一位一位地考虑,dp[前i-1位已经处理完][n个数进位情况状态],于是每次转移暴力枚举给每个数加石子的情况,复杂度
代码:
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>#include<string>#include<iomanip>#include<vector>#include<set>#include<map>#include<queue>using namespace std;typedef long long LL;typedef unsigned long long ULL;#define rep(i,k,n) for(int i=(k);i<=(n);i++)#define rep0(i,n) for(int i=0;i<(n);i++)#define red(i,k,n) for(int i=(k);i>=(n);i--)#define sqr(x) ((x)*(x))#define clr(x,y) memset((x),(y),sizeof(x))#define pb push_back#define mod 1000000007const int inf=0x3f3f3f3f;int n;int dp[25][2000],w[20],v[20];inline int getlen(int x){ int ret=0; while(x) { if(x&1)ret++; x>>=1; } return ret;}int main(){ while(~scanf("%d",&n)) { rep0(i,n)scanf("%d",&w[i]); if(n==1) { puts("impossible"); continue; } int tot=1<<n; int maxlen=0; for(int i=0;i<n;i++) { for(int j=22;j>=0;j--)if((1<<j)&w[i]){maxlen=max(maxlen,j);break;} } for(int i=0;i<=maxlen+2;i++)for(int j=0;j<tot;j++)dp[i][j]=inf; dp[0][0]=0; for(int i=0;i<=maxlen+1;i++) { v[i]=0; for(int j=0;j<n;j++)if(w[j]&(1<<i))v[i]|=1<<j; } for(int i=0;i<=maxlen+1;i++) { for(int j=0;j<tot;j++) { if(dp[i][j]==inf)continue; int C=0,R=0; for(int k=0;k<n;k++) { R|=(1<<k)&(v[i]^j); C|=(1<<k)&v[i]&j; } for(int k=0;k<tot;k++) { int ca=C,rest=0; for(int t=0;t<n;t++) { rest|=(1<<t)&(R^k); ca|=(1<<t)&R&k; } if(getlen(rest)&1)continue; dp[i+1][ca]=min(dp[i+1][ca],dp[i][j]+(1<<i)*getlen(k)); } } } printf("%d\n",dp[maxlen+2][0]); } return 0;}
0 0
- HDU 4317 状压DP
- hdu 4317 Unfair Nim(状压DP)
- HDU 4628状压DP
- HDU 4539 状压DP
- HDU 1074 状压DP
- HDU 3182 状压DP
- hdu 4284(状压dp)
- hdu 2167(状压dp)
- hdu 4539(状压dp)
- hdu 4114(状压dp)
- HDU 4539 状压DP
- hdu 3001 状压DP
- HDU 4892 状压dp
- HDU 5045 DP+状压
- hdu-1074(状压dp)
- HDU 2167 状压DP
- hdu 5418 状压dp
- HDU 1565【状压DP】
- 【Halcon】Halcon学习之七:改变图像的现实方式和大小
- idea 的10大常用快捷键
- Unity3d文件部署到IIS,图解 配置说明
- C++之overload、shadow和override的区别
- myBatis批量添加,修改和删除
- HDU 4317 状压DP
- Java编程开发设计模式之--抽象工厂模式(Abstract Factory)
- jQuery EasyUI tree的 使用
- 怎么修改button切换选中状态的时候背景出现一个小蓝点的问题
- 百度地图sdk定位所在的城市名称和街道信息
- android how to add vcs 版本控制
- Unity3D和网页数据交互的基本原理
- JavaScriptCore基本概念和基本使用(Swift)
- [iOS 字符串] 字符串后几位截取