摘要: dp[n行][位压缩数][剩下k个棋子]不用n行滚动数组也可。更新与之前所有行不冲突的情况以及不放棋子情况,最后对dp[n][all][0]求和。 1 #include 2 #include 3 #include 4 int n, k; 5 const int maxn = 1 << 8 | 1; 6 int dp[10][maxn][10]; 7 char g[10][10]; 8 int main() 9 {10 while(scanf("%d%d", &n, &k), n != -1 || k != -1)11 {12 memset(dp, 阅读全文
posted @ 2013-09-24 21:24 CSGrandeur 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 每行摆棋子状态位压缩,对能够相邻的行链表建图,dp[n行][状态1024][还剩下没放的棋子数k],最后把dp[n][all(合法)][0]相加。 1 #include 2 #include 3 #include 4 const int maxn = 1033; 5 int fst[1033], nex[maxn * maxn], v[maxn * maxn]; 6 int wnum; 7 void Add(int a, int b) 8 { 9 nex[wnum] = fst[a];10 fst[a] = wnum;11 v[wnum] = b;12 wnum... 阅读全文
posted @ 2013-09-24 20:33 CSGrandeur 阅读(339) 评论(0) 推荐(0) 编辑