zoj 3471Most Powerful
题意:给n个atom(原子),每两个原子相碰会产生能量,不过每次碰撞会消失一个原子,而且不同原子碰撞,消失的原子不同,产生的能量也会不同,给出不同原子相碰撞产生的能量,求出能产生的最多能量。
状态DP
状态s表示n个原子的状态。
每次碰撞只消失一个原子,最后会剩下一个原子不消失,最终的答案是max(dp[(1<<n-1)^(1<<i)]),i 表示最后剩下的原子。
状态转移方程是: i 是 s 中消失的原子,j 是没有消失的原子 dp[s]=max(dp[s^(1<<i)]+map[j][i])
#include<stdio.h>
#include<string.h>
#define max(a,b) (a)>(b)?(a):(b) int n;
int dp[<<],map[][];
int DP(int s)
{
if(dp[s]!=-) return dp[s];
for(int i=;i<n;i++)
{
if(!(s&(<<i))) continue;
for(int j=;j<n;j++)
{
if(s&(<<j)) continue;
dp[s]=max(dp[s],DP(s^(<<i))+map[j][i]);
}
}
return dp[s];
}
int main()
{
while(scanf("%d",&n) && n)
{
for(int i=;i<n;i++)
for(int j=;j<n;j++)
scanf("%d",&map[i][j]);
memset(dp,-,sizeof(dp));
dp[]=;
int ans=,all=(<<n)-;
for(int i=;i<n;i++)
ans=max(ans,DP(all^(<<i)));
printf("%d\n",ans);
}
return ;
}
zoj 3471Most Powerful的更多相关文章
- zoj 3471 Most Powerful
题目链接:zoj 3471 Most Powerful 作者:jostree 转载请说明出处 很经典的状态dp,使用i的二进制位表示粒子的状态,0表示存在,1表示不存在.dp[i]表示在状态i的情况 ...
- zoj 3471 Most Powerful(状态压缩dp)
Recently, researchers on Mars have discovered N powerful atoms. All of them are different. These ato ...
- Most Powerful(ZOJ 3471状压dp)
题意:n个原子,两两相撞其中一个消失,产生能量,给出任意两原子相撞能产生的能量,求能产生的最大能量. 分析:dp[i]表示情况为i时产生的最大能量 /*#include <map> #in ...
- ZOJ 3471 Most Powerful(DP + 状态压缩)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4257 题目大意:有 n(2<=n<=10) 个原子,每两 ...
- zoj 3471 Most Powerful (有向图)最大生成树 状压dp
题目链接 题意 \(N\)种气体,\(i\)气体与\(j\)气体碰撞会: 产生\(a[i][j]\)的威力: 导致\(j\)气体消失. 求产生威力之和的最大值. 思路 和前几题找图上路径的题不一样,该 ...
- ZOJ 3471 Most Powerful (状压DP,经典)
题意: 有n个原子,每当两个原子碰撞时就会产生能量,并且消耗其中一个原子.已知每两个原子碰撞时消耗其中指定一个原子所产生的能量,问最多能产生多少能量? 思路: 一开始以为是找一个有序序列,使得能量最大 ...
- ZOJ - 3471 Most Powerful (状态压缩)
题目大意:有n种原子,两种原子相碰撞的话就会产生能量,当中的一种原子会消失. 问这n种原子能产生的能量最大是多少 解题思路:用0表示该原子还没消失.1表示该原子已经消失.那么就能够得到状态转移方程了 ...
- zoj 3471 Most Powerful(状压dp+Tsp问题+连续性问题)
上来直接一波敲键盘,直接套Tsp问题的代码 然后WA 发现貌似这道题没有连续性. Tsp问题是一条路径,一个点到另一个点,多了一个限制,所以就需要加多一维 而这道题没有限制,也就是说那一维不需要加,我 ...
- ZOJ 2112 Dynamic Rankings(主席树の动态kth)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2112 The Company Dynamic Rankings ...
随机推荐
- 单调旋转数组的TopK问题
问题描述:输入一个单调旋转后的数组,求该数组中的第k小的元素. 分析:很多人看到这个题目会有点懵,可能读者不知道什么是旋转数组,我先解释下两个概念, 旋转数组的定义:把一个数组的前几项元素移动到数组的 ...
- struts2 s:if 的字符串比较问题
如果数据库字段的数据类型为string or char 类型,此时在页面 <s:if test=""></s:if> 中test <s:iterat ...
- asp.net 跨页面传值常用方法
常用方法有以下: 1.queryString 2.form-post控件传递 3.cookie 4.application 5.session querystring: http://website. ...
- Python同步数据库的数据到Neo4J
写了主要是步骤,如果疑问,请咨询QQ:5988628 Python版本采用2.7.X,默认的2.6.X后期会有问题,建议,一开始就升级Python.然后再安装pip. 访问数据库 sqlalchemy ...
- MapReduce详解
1.mapreduce之shuffle http://blog.csdn.net/thomas0yang/article/details/8562910 2.彻底了解mapreduce核心Shuffl ...
- [Linked List]Reverse Nodes in k-Group
Total Accepted: 48614 Total Submissions: 185356 Difficulty: Hard Given a linked list, reverse the no ...
- juce 中的WeakReference分析
juce中的WeakReference设计得比较巧妙,巧妙就是使用delete之后就可以通知道WeakReference,原理其实也很间单,其实就是在对象里添加了一个子对象masterReferenc ...
- centos 添加epel、remi仓库和ELRepo仓库
centos使用yum安装软件非常方便,yum会自动安装软件的相关依赖.但是centos自带的源仓库,软件相对老旧并且不太全,所以我们可以添加第三方仓库,可以安装较新的软件版本. epel是fedor ...
- 顺序表--MyArrayList的实现
实现的MyArrayList实为顺序表结构,其中要实现Iterable时必须在内部实现Iterator,即为该表的迭代器. public class MyArrayList<AntType> ...
- Linux man 后面的数字含义及作用
Linux的man很强大,该手册分成很多section,使用man时可以指定不同的section来浏览,各个section意义如下: 1 Executable programs or shell co ...