nefu1109 游戏争霸赛(状压dp)

题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109

//我们校赛的一个题,状压dp,还在的人用1表示,被淘汰的人用0表示。倒着循环即可。

//比赛的时候我用的是二维dp数组表示状态,一直是WA的,搞不懂原因。。。Orz。。。

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
const int INF=0x3f3f3f3f;
const int maxn=; int dp[<<]; ///dp用一维就能表示状态
int d[][]; int main()
{
int n;
while(scanf("%d",&n)==)
{
for(int i=; i<n; i++)
for(int j=; j<n; j++)
scanf("%d",&d[i][j]);
memset(dp,,sizeof(dp));
for(int i=(<<n)-; i>=; i--)
{
for(int j=; j<n; j++)
{
int tmp=(<<j);
if(i&tmp)
{
for(int k=; k<n; k++)
{
if((<<k)&i) continue;
dp[i]=max(dp[i],dp[i^(<<k)]+d[j][k]);
}
}
}
}
int ans=-INF;
for(int i=; i<n; i++)
ans=max(ans,dp[<<i]);
printf("%d\n",ans);
}
return ;
}
上一篇:Vim 游戏 2048


下一篇:3I工作室的成员在2013年(第6届)中国大学生计算机设计大赛总决赛中荣获全国二等奖