题意:给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;
}