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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章