传送门 zoj3471
题目描述
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 atoms perform when collided and the power every two atoms can produce.
You are to write a program to make it most powerful, which means that the sum of power produced during all the collides is maximal.
输入
There are multiple cases. The first line of each case has an integer N (2 <= N <= 10), which means there are N atoms: A1, A2, … , AN. Then N lines follow. There are N integers in each line. The j-th integer on the i-th line is the power produced when Ai and Aj collide with Aj gone. All integers are positive and not larger than 10000.
The last case is followed by a 0 in one line.
There will be no more than 500 cases including no more than 50 large cases that N is 10.
输出
Output the maximal power these N atoms can produce in a line for each case.
样例
- Input
2
0 4
1 0
3
0 20 1
12 0 1
1 10 0
0- Output
4
22
题解
- 题意:有n个原子,原子i碰撞j可产生能量w[i][j],然后被撞原子j会消失。给出原子数n和所有的w[i][j],求出能产生的最大能量
- 我们用sta=0到sta=1<<n-1来表示碰撞过程中所有的状态,1表示原子存在,0表示消失。用dp[sta]来表示当前状态下能达到的最大能量值,那么当只剩下一个原子p的时候,dp[1<<p]就是只剩p时的最大能量值。枚举每一种状态,在该状态下枚举两个存在的原子i和j,用i去碰撞j,状态转移方程为: dp[sta^(1<<j)]=max(dp[sta^(1<<j)],dp[sta]+w[i][j])
Code
1 |
|