zoukankan      html  css  js  c++  java
  • light oj 1011Marriage Ceremonies

    总结状压dp板子。

    强迫症预处理,多写了几行但非常快

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int INF=0x3f3f3f3f;
    const int maxn=16;
    int dp[1<<maxn],bp[1<<maxn];
    int mp[maxn+4][maxn+4];
    struct fuck{
    	int a[1<<maxn];
    	int idx;
    }f[18];
    int getnum(int x)
    {
    	int ans=0;
    	while(x>0)
    	{
    		if(x&1)	ans++;
    		x>>=1;
    	}
    	return ans;
    }
    void init()
    {
    	int m=1<<maxn;
    	int i,j;
    	for(i=1;i<=16;i++)
    		f[i].idx=0;
    	for(i=1;i<m;i++)
    	{
    		j=getnum(i);
    		f[j].a[f[j].idx++]=i;
    	}
    }
    int main()
    {
    	int i,j,n,m,t;
    	scanf("%d",&t);
    	init();
    	int cas=1;
    	while(t--)
    	{
    		scanf("%d",&n);
    		for(i=1;i<=n;i++)
    			for(j=1;j<=n;j++)
    				scanf("%d",&mp[i][j]);
    		memset(dp,0,sizeof(dp));
    		int len=(1<<n);
    		int k;
    		for(i=1;i<=n;i++)
    		{
    			for(j=0;j<f[i].idx;j++)
    			{
    				if(f[i].a[j]>=len)	break;
    				for(k=0;k<n;k++)
    				{
    					int sb=(1<<k);
    					if(f[i].a[j]&sb)
    						dp[f[i].a[j]]=max(dp[f[i].a[j]],dp[f[i].a[j]|sb]+mp[i][k+1]);
    				}
    			}
    		}
    		printf("Case %d: %d
    ",cas++,dp[(1<<n)-1]);
    	}
    	return 0;
    }
    
  • 相关阅读:
    “王者对战”之 MySQL 8 vs PostgreSQL 10
    PostgreSQL 进程结构
    Linux core dump 诊断进程奔溃退出
    linux下core dump--转载
    2.4 等比数列
    2.3 等差数列的前n项和
    2.2 等差数列
    1.1.1 三角形正弦定理
    调整颜色
    去括号法则
  • 原文地址:https://www.cnblogs.com/bitch1319453/p/4817882.html
Copyright © 2011-2022 走看看