ZOJ - 3471 Most Powerful (状态压缩)】的更多相关文章

题目大意:有n种原子,两种原子相碰撞的话就会产生能量,当中的一种原子会消失. 问这n种原子能产生的能量最大是多少 解题思路:用0表示该原子还没消失.1表示该原子已经消失.那么就能够得到状态转移方程了 dp[state | (1 << i)] = max(dp[state | (1 << i)], dp[state] + power[j][i]) 上面的方程表示的是在state的情况下.用j原子去碰撞i原子,i原子消失所能得到的最大能量 注意这题:产生的能量有可能是负的 #inclu…
题目链接:zoj 3471 Most Powerful  作者:jostree 转载请说明出处 很经典的状态dp,使用i的二进制位表示粒子的状态,0表示存在,1表示不存在.dp[i]表示在状态i的情况下能够释放的最大的能量,注意自身不能够发生碰撞.例如4个粒子的状态1100表示第0个和第1个粒子不存在,第2.3个粒子存在则可以转移到状态1110或1101.最终遍历只剩下一颗粒子的情况下的所有能量中的最大值. 代码如下: #include <cstdio> #include <cstdli…
Description Several startup companies have decided to build a better Internet, called the "FiberNet". They have already installed many nodes that act as routers all around the world. Unfortunately, they started to quarrel about the connecting li…
Recently, researchers on Mars have discovered N powerful atoms. All of them are different. These atoms have some properties. When two of these atoms collide, one of them disappears and a lot of power is produced. Researchers know the way every two at…
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4257 题目大意:有 n(2<=n<=10) 个原子,每两个原子(假设为i.j)碰撞会导致一个原子(假设为 j)消失,并产生巨大的能量(假设为 A[i][j]),现在给你所有的 A[i][j],问能够产生的最大能量是多少 Sample Input 20 41 030 20 112 0 11 10 00 Sample Output 422 分析:假设一个数,第i位表示…
题目链接 题意 \(N\)种气体,\(i\)气体与\(j\)气体碰撞会: 产生\(a[i][j]\)的威力: 导致\(j\)气体消失. 求产生威力之和的最大值. 思路 和前几题找图上路径的题不一样,该题如果抽象成图上的问题,则为: 在有向连通图中找一棵树,对于每一对\((parent,child)\)关系对,\(parent\)相当于这里的气体\(i\),\(child\)相当于这里的气体\(j\),要使得树上的边权值最大. 但状态的表示倒是仍然可以借鉴. 状态:\(1\)表示消失了的气体,\(…
题意: 有n个原子,每当两个原子碰撞时就会产生能量,并且消耗其中一个原子.已知每两个原子碰撞时消耗其中指定一个原子所产生的能量,问最多能产生多少能量? 思路: 一开始以为是找一个有序序列,使得能量最大,但是一个原子可能一直和别的原子碰撞且留到最后,所以序列是不行的. 我们只需要知道消耗的是谁就行了,而不需要管到底是谁碰撞到这个被消耗的原子,那么状态转移就更方便了,每次找到两个还没有碰撞的,碰掉其中1个,然后转移. //#include <bits/stdc++.h> #include <…
上来直接一波敲键盘,直接套Tsp问题的代码 然后WA 发现貌似这道题没有连续性. Tsp问题是一条路径,一个点到另一个点,多了一个限制,所以就需要加多一维 而这道题没有限制,也就是说那一维不需要加,我加了还WA 然后要搞清楚状态,在纸上可以写,写清楚了再敲代码 这道题一开始都是存在,初始状态是0000--所以就用0表示存在,1表示不存在 #include<cstdio> #include<cstring> #include<algorithm> #define REP(…
题意: 有n种化学物质,他们彼此反应会有一种消失并释放出能量. 给出矩阵,第i行j列代表i和j反应j消失释放的能量. 求最大释放多少能量. 思路: 状态压缩DP,我是这么想的. 利用二进制0代表该物质还存在,1代表不存在. 那么一共有2^(n)种状态,每个状态都视为从上一个状态发生一次反应少了一种物质.枚举可能少的物质. 这题被自己坑了,其实不是2^(n)种状态,因为无论如何都会剩一种物质,并不是所有的物质都会消失.所以状态的总数是2^(n)-1种,然后从所有的剩一种物质的状态中寻找max.就是…
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1563 题目大意:在h*w的矩阵里铺满1*3的小矩阵,共有多少种方法 Sample Input 3 3 3 10 0 0 Sample Output 2 28 分析:状态压缩DP,跟ZOJ 1100 及其相识,不过那道题目使用1*2的木板平铺,题解链接:http://www.cnblogs.com/acm-bingzi/p/3289994.html 但是不能照搬这道题…