ZOJ 3471 Most Powerful (状压DP)
来源:互联网 发布:成都 都江堰旅游 知乎 编辑:程序博客网 时间:2024/05/17 11:07
n(<=10)种气体,两两相互碰撞会使得其中一种气体消失,同时释放出能量。问最多能释放出多少能量。
用一个2进制位表示气体是否存在,n种气体对应n位2进制位,表示一个状态。
设dp[i]表示在状态i下释放出的最大能量。
状态转移方程:
初始化:dp全部为0,从状态2^n-1开始枚举。
#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;#define maxn 11#define inf 0x3f3f3f3fint D[maxn][maxn];int dp[1<<10];int main(){ int n,i,j,k; while(~scanf("%d",&n)&&n) { for(i=1;i<=n;++i) for(j=1;j<=n;++j) scanf("%d",&D[i][j]); memset(dp,0,sizeof(dp)); for(i=(1<<n)-1;i>=3;--i) { for(j=1;j<=n;++j) { if(i&(1<<(j-1))) { for(k=1;k<=n;++k) { if(j==k) continue; if(i&(1<<(k-1))) { dp[i^(1<<(k-1))]=max(dp[i^(1<<(k-1))],dp[i]+D[j][k]); dp[i^(1<<(j-1))]=max(dp[i^(1<<(j-1))],dp[i]+D[k][j]); } } } } } int ans=-1; for(i=1;i<(1<<n);i<<=1) ans=max(ans,dp[i]); printf("%d\n",ans); } return 0;}
0 0
- Most Powerful - ZOJ 3471 状压dp
- ZOJ 3471 Most Powerful(状压DP)
- ZOJ 3471 Most Powerful(状压dp)
- ZOJ 3471 Most Powerful(状压DP)
- [ZOJ 3471] Most Powerful · 状压DP
- zoj 3471 Most Powerful 【状压DP】
- ZOJ 3471 Most Powerful(状压DP)
- ZOJ 3471 Most Powerful (状压DP)
- ZOJ 3471 Most Powerful (状压dp)
- ZOJ 3471 Most Powerful 状压dp
- zoj 3471 Most Powerful(状压)
- Most Powerful (zoj 3471 状压dp 点集配对)
- zoj 3471 Most Powerful 状压dp(简单)
- zoj 3471 Most Powerful //状态压缩DP
- ZOJ 3471 Most Powerful 状态压缩DP
- zoj 3471 Most Powerful 状态压缩dp
- zoj 3471 Most Powerful (状态压缩dp)
- ZOJ 3471 Most Powerful(状态压缩DP)
- setsebool命令和设置命令
- 值传递和引用传递
- 培训总结
- 第四周 项目6-多项式求和
- UIActionSheet,UIAlertView技术分享
- ZOJ 3471 Most Powerful (状压DP)
- 第4周项目2 建设“单链表”算法库
- Apple Watch开发Glance界面指南
- 第4周项目5猴子选大王
- 第六周 项目1 建立顺序栈
- 第四周项目3 单链表应用(2)
- 第六周上机实践—项目4—数制转换
- BestCoder Round #58 Card Game 即 hdu5494 (排序)
- 第六周项目一-建立顺序栈算法库