做网站一般要多钱,营销比较好的知名公司有哪些,wordpress多少钱一年,做商业网站需要注册公司吗Most Powerful
题意#xff1a;
n个原子#xff0c;当其中两个原子碰撞时#xff0c;其中一个会消失#xff0c;产生大量能量。现在知道每两个原子的碰撞表现#xff0c;求出产生的能量总和的最大值
题解:
设dp[i]表示i状态下所获得的能量 i为二进制#xff0c;第x位…Most Powerful
题意
n个原子当其中两个原子碰撞时其中一个会消失产生大量能量。现在知道每两个原子的碰撞表现求出产生的能量总和的最大值
题解:
设dp[i]表示i状态下所获得的能量 i为二进制第x位为1说明该位的原子已经消失 当j和k原子都还未消失即i的第j位和第k位都是0j和k碰撞会产生a[j][k]的能量且k会消失i将变成dp[i|(1k)] 所以得状态转移方程 dp[i|(1k)] max(dp[i|(1k)], dp[i] a[j][k]);因为最后肯定会剩下一个原子所以枚举每个原子被剩下的情况取最大值
代码
#include bits/stdc.husing namespace std;const int N 20 5;
typedef long long LL;
int n, a[N][N], dp[112];
int main() {while (scanf(%d, n) n ! 0) {for (int i 0; i n; i) {for (int j 0; j n; j) {cin a[i][j];}}memset(dp, 0, sizeof dp);int num (1 n) - 1;for (int i 0; i num; i) {for (int j 0; j n; j) {if (!(i (1 j))) {for (int k 0; k n; k) {if (!(i (1 k))) {dp[i|(1k)] max(dp[i|(1k)], dp[i] a[j][k]);}}}}}int res 0;for (int i 0; i n; i) {res max(res, dp[num - (1 i)]);}cout res endl;}return 0;
}