lightoj 1011 Marriage Ceremonies (状态压缩dp~)

来源:互联网 发布:郑州seo招聘 编辑:程序博客网 时间:2024/05/29 18:08

这题属于模板题,,好像以前写过类似的,反正1900ms水过。。感觉挺暴力的。。。。

关键是dp[i][state]的含义,表示前i个男生在女生状态为state时结果最大值



#include <cstdio>#include <cstring>#include <iostream>#define Max_n 16using namespace std;int n;int map[Max_n][Max_n];int dp[Max_n][(1 << Max_n) + 10];int main(void) {  int kase;  int t = 0;  scanf("%d", &kase);  while (kase--) {    scanf("%d", &n);    memset(dp, 0, sizeof(dp));    for (int i = 0; i < n; i++) {      for (int j = 0; j < n; j++) {        scanf("%d", &map[i][j]);      }    }    for (int i = 0; i < n; i++) {      dp[0][1 << i] = map[0][i];    }    for (int i = 0; i < n - 1; i++) {      for (int s = 0; s < (1 << n); s++) {        for (int m = 0; m < n; m++) {          if ((1 << m) & s) continue;          dp[i + 1][(1 << m) | s] =              max(dp[i + 1][(1 << m) | s], dp[i][s] + map[i + 1][m]);        }      }    }    printf("Case %d: %d\n", ++t, dp[n - 1][(1 << n) - 1]);  }  return 0;}


原创粉丝点击