Hdu 4539 状态压缩
来源:互联网 发布:天喜抽奖软件 编辑:程序博客网 时间:2024/05/12 16:34
直接做掉的状态压缩dp,但是数组开小了,WA了3次。。。。
#include<iostream>#include<cstring>#include<cmath>#include<cstdio>#include<algorithm>using namespace std;int um[1001],state[10001],num;void getdp(int n){ num = 0; for(int i=0;i<(1<<n);i++) if((i&(i<<2) )== 0) state[num++] = i;}int make_dp(int x){ int sum = 0; while(x){ if(x % 2 == 1)sum++; x /= 2; } return sum;}int dp[108][230][230];int main() { int n,m,t; // freopen("input.txt","r",stdin); while(~scanf("%d%d",&n,&m)){ memset(um,0,sizeof(um)); for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ scanf("%d",&t); if(t == 0) um[i] = um[i]|(1<<j); } } getdp(m); memset(dp,-1,sizeof(dp)); for(int i=0;i<num;i++) { if(um[0] & state[i])continue; dp[0][i][0] = make_dp(state[i]); } for(int i=1;i<n;i++) { for(int j = 0;j<num;j++){ if(um[i] & state[j])continue; for(int k=0;k<num;k++){ if(state[j]&(state[k]<<1))continue; if((state[j]<<1)&(state[k]))continue; for(int p=0;p<num;p++) { if(dp[i-1][k][p] == -1) continue; if((state[k]<<1) & state[p])continue; if(state[j]&(state[p]))continue; if((state[k]&(state[p]<<1)))continue; dp[i][j][k] = max(dp[i][j][k],dp[i-1][k][p]+make_dp(state[j])); } } } } int ans = -1; for(int i=0;i<num;i++) for(int j=0;j<num;j++) ans = max(ans,dp[n-1][i][j]); printf("%d\n",ans); }}
0 0
- Hdu 4539 状态压缩
- hdu 4539 状态压缩DP
- hdu 4539 状态压缩DP
- hdu 4539 状态压缩DP
- [状态压缩DP] HDU 4539
- POJ 1185 HDU 4539 状态压缩DP
- HDU 4539 状态压缩DP简单题
- HDU 4539 经典状态压缩DP
- hdu 3006 状态压缩
- hdu 2167 状态压缩
- hdu 4462(状态压缩)
- hdu 4628(状态压缩)
- hdu 2167状态压缩
- HDU 4628 状态压缩
- (1074)HDU-状态压缩
- hdu 3811 状态压缩
- hdu 5418 (状态压缩)
- 【状态压缩dp】HDU
- 黑马程序员——面向对象
- C#委托的介绍(delegate、Action、Func、predicate)
- 汉诺塔问题的递归实现
- debian最快的源(转)
- 常用数据结构————数组操作
- Hdu 4539 状态压缩
- Linux编程基础
- javascript原型prototype代码片段笔记
- ubuntu下android源码的下载(最新)
- 多队列网卡简介以及Linux通过网卡发送数据包源码解读
- java.lang.NullPointerExceptionat org.ksoap2.serialization.SoapSerializationEnvelope.getResponse
- JAVA多线程基础
- asp.net 对Cookie的简单操作
- 数据结构 第一章 绪论