您的位置:首页 > 其它

zoj 3471

2014-07-24 10:33 239 查看
状态压缩 dp

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <vector>
#include <sstream>
#include <string>
#include <cstring>
#include <algorithm>
#include <iostream>
#define maxn 105
#define INF 0x3f3f3f3f
#define inf 10000000
#define MOD 100000000
#define ULL unsigned long long
#define LL long long
#define _setm(A) memset(A, INF, sizeof(A))

using namespace std;

int n, g[15][15], dp[1<<15];

int main() {
// freopen("in.txt", "r", stdin);
while(scanf("%d", &n) == 1 && n) {
memset(dp, 0, sizeof(dp));
for(int i = 0; i < n; ++ i) {
for(int j = 0; j < n; ++ j) {
scanf("%d", &g[i][j]);
}
}

for(int i = (1<<n)-1; i >= 0; -- i) {
for(int j = 0; j < n; ++ j) {
if((i&(1<<j)) == 0) continue;
for(int k = 0; k < n; ++ k) {
if(j == k || (i&(1<<k)) ==  0) continue;
int nS = i-(1<<k);
dp[nS] = max(dp[nS], dp[i]+g[j][k]);
}
}
}
int ans = 0;
for(int i = 0; i < (1<<n); ++ i) {
ans = max(ans, dp[i]);
}
printf("%d\n", ans);
}
return 0;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: