您的位置:首页 > 其它

zoj 3471 Most Powerful

2011-02-14 14:43 141 查看
昨天的月赛题。DP题。不会做,搜了之后凑合理解明白了。



学了下位运算的状态压缩 = =。。。很强大的东西。。。



详见解说http://blog.csdn.net/magicnumber/archive/2011/02/13/6182891.aspx



#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <string.h>
#include <queue>
#include <limits.h>
using namespace std;
int map[12][12];
int dp[2000];
int bin[13] = {0,1,2,4,8,16,32,64,128,256,512,1024};
int main()
{
	int i,k,p,maxx,n;
	while( ~scanf("%d",&n) && n )
	{
		memset(dp,0,sizeof(dp));
		for(i=1; i<=n; i++)
			for(k=1; k<=n; k++)
				scanf("%d",&map[i][k]);
				
		for(i=0; i<bin[n+1]; i++)
			for(k=1; k<=n; k++)
				if( (i & bin[k]) == 0 )
					for(p=1; p<=n; p++)
						if( (i & bin[p]) == 0 && p != k )
							dp[i+bin[p]] = max(dp[i]+map[k][p],dp[i+bin[p]]);
		maxx = 0;		
		for(i=0; i<bin[n+1]; i++)
				if( dp[i] > maxx )
					maxx = dp[i];
		printf("%d/n",maxx);
	}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: