09 2013 档案
摘要: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,
阅读全文
摘要:每行摆棋子状态位压缩,对能够相邻的行链表建图,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...
阅读全文
摘要:排列组合 1 #include 2 #include 3 #include 4 int n, k; 5 int COM(int n, int m) 6 { 7 if(m > n - m) m = n - m; 8 int i, j, res = 1; 9 for(i = n, j = 1; i > n - m; i --)10 {11 res *= i;12 for(; j n)21 {22 printf("0\n");23 continue;24 ...
阅读全文