LightOJ-1011-Marriage Ceremonies [状态压缩][DP]


题目传送门


题意:给n对男女两两之间的好感度,求将他们所有两两结合起来得到的最大好感度。

思路:状压DP,dp[i][j]表示选前i个人的j种选法的最大好感度。

#include <bits/stdc++.h>

using namespace std;

int dp[20][70000];
int a[20][20];
int main(void)
{
    int T, cas=1;
    scanf("%d", &T);
    while (T--)
    {
        int n;
        scanf("%d", &n);
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= n; j++)
            {
                scanf("%d", &a[i][j]);
            }
        }
        int maxn = 1<<n;
        for (int i = 0; i <= n; i++)
            for (int j = 0; j <= maxn; j++)
                dp[i][j] = 0;
        for (int i = 1; i <= n; i++)
        {
            for (int j = 0; j < maxn; j++)
            {
                for (int k = 1; k <= n; k++)
                {
                    int t = 1<<(k-1);
                    if ((j&t)==0)
                    {
                        dp[i][j|t] = max(dp[i][j|t], dp[i-1][j]+a[i][k]);
                    }
                }
            }
        }
        printf("Case %d: %d\n", cas++, dp[n][(1<<n)-1]);
    }
    return 0;
}
发布了101 篇原创文章 · 获赞 1 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章