做多校的时候遇见一个求拓扑排序数量的题,就顺便来写了一下。题意: 你有个朋友是KOF的狂热粉丝,他有一个对其中英雄的强弱比较,让你根据这些比较关系来给这些英雄排名。问一共有多少种排名方式。思路: 用dp[S]记录当前状态的数量。 S表示拓扑排序中当前阶段已经被排序的点的集合。然后就可以枚举当前排.....
分类:
其他好文 时间:
2014-08-06 18:17:24
阅读次数:
315
题意:
给一个n个数的数列,从中取一些数构成新数列,
如果新数列中有一些数的和是k,那么这就是一个好数列,问这样的数列的个数。
n,k
状态:dp[][state] 中state的二进制每一位表示和为(1~k),1表示可以取到,0表示取不到。
状态转移方程:dp[i][state] = sum(dp[i-1][state']); state = 1
...
分类:
移动开发 时间:
2014-08-03 18:08:55
阅读次数:
269
题目链接
题意:
一个矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧,可以放牧用1表示,否则用0表示,在这块牧场放牛,要求两个相邻的方格不能同时放牛,即牛与牛不能相邻。问有多少种放牛方案(一头牛都不放也是一种方案)
state[i] 表示对于一行,保证不相邻的方案
状态:dp[i][ state[j] ] 在状态为state[j]时,到第i行符合条...
分类:
其他好文 时间:
2014-08-03 05:45:34
阅读次数:
246
经典状态压缩dp#include #include #include #include #define min(x,y) (x>y?y:x)using namespace std;int factor[30],all,n,a[105],b[105][1f[i-1][p0]+abs(a[i]-j)) ...
分类:
其他好文 时间:
2014-08-02 15:16:53
阅读次数:
198
题目大意是在一块M行N列的农场上种谷物,但是不希望彼此相邻(共用一条边),并且有些地方不能种植谷物,给定M,N(范围都不超过12)以及一些不能种谷物的位置,求出一共有多少种方法种谷物。
状态压缩DP,设dp(i, k) 为种到第i行时,第i行状态为k的总共方案数,可以知道dp(i, k) = ∑dp(i -1, k'),其中我们要判断彼此相邻的情况以及不能种植的情况即可。
#i...
分类:
其他好文 时间:
2014-08-01 23:08:32
阅读次数:
225
一个农民有n行m列的地方,每个格子用1代表可以种草地,而0不可以。放牛只能在有草地的,但是相邻的草地不能同时放牛, 问总共有多少种方法。...
分类:
编程语言 时间:
2014-07-31 23:57:50
阅读次数:
608
状态压缩DP
dp[i][j]表示在i状态(用二进制表示城市有没有经过)时最后到达j城市的最小时间
转移方程dp[i][j]=min(dp[i][k]+d[k][j],dp[i][j])
d[k][j]是k城市到j城市的最短距离 要先用flody处理
#include
using namespace std;
int d[20][20],dp[1<<11][20];
int n,m;...
分类:
其他好文 时间:
2014-07-27 11:17:42
阅读次数:
176
找最长的其实是很裸的状态压缩DP,棘手的地方是要统计数量,其实只要再来一个数组存就好。不过代码比较长,细节要注意的地方毕较多,wa了很多发,还是要仔细啊用递推和记忆化搜索分别写了一遍#include #include #include #include #include #include #incl...
分类:
其他好文 时间:
2014-07-25 13:52:51
阅读次数:
265
状态压缩dp#include#include#include#include#include#define maxn 16using namespace std;long long dp[1<<maxn];long long weapon[1<<maxn];int robot[maxn];char ...
分类:
其他好文 时间:
2014-07-16 18:35:59
阅读次数:
228
状态压缩DP真心不会写,参考了别人的写法。先预处理出合理状态,我们用二进制表示可以放棋子的状态,DP[I][J][K]:表示现在处理到第I行,J:表示第I行的状态,K表示现在为止一共放的棋子数量。#include#include#define N 1111using namespace std;t....
分类:
其他好文 时间:
2014-07-14 19:56:24
阅读次数:
254