zoj-3471 Most powful
生活随笔
收集整理的這篇文章主要介紹了
zoj-3471 Most powful
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:任意兩個能量球相撞,得到一個能量,此能量消失,問你最后能得到的最大能量
題解:利用二進制壓縮逆推,由11111狀態推到00001等狀態。
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespace std; const int M = (1<<11)+3; int dp[M],a[M]; int map[15][15]; int main(){int T,n;while(cin >> n,n){for(int i = 0;i < n;i ++){for(int j = 0;j < n;j++){cin >> map[i][j];}}int cnt = 1 << n;for(int i = cnt-1;i>=0;i-- ){dp[i] = 0;for(int j = 0;j < n;j ++){int ret = 1 << j;if(!(i&ret)) continue ;for(int k = 0;k < n;k++){int res = 1 << k;if(res&i) continue;if(k == j) continue;dp[i] = max(dp[i],dp[i|res] + map[j][k]);}}}int ans = -1;for(int i = 0;i < cnt;i++) ans = max(ans,dp[i]);//尋找狀態只剩一個氣體的最大值cout << ans <<endl;} }總結
以上是生活随笔為你收集整理的zoj-3471 Most powful的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序写不好,总理当到老!
- 下一篇: JeecgBoot与MongoDB集成实