完全背包这里要装满,所以要注意dp初始化:dp[0]=0;当求背包最小值时dp[i]=INF(无穷大) (1<=i<=n);反之 dp[i]= -INF(无穷小) (1<=i<=n);View Code #include<stdio.h>#include<string.h>#include<algorithm>#define INF 1000000000using namespace std;int dp[10003],p[503],w[503];int main(){ int cas,i ,j, m, n, x, y; scanf( Read More
posted @ 2012-08-08 19:54
To be an ACMan
Views(204)
Comments(0)
Diggs(0)
一些二进制的基本知识:判断j是否属于集合i:i&(1<<j)在集合i中去除j:i-(1<<j)或者i&(!(1<<j)) i^(1<<j)在集合i中加入点j:i|(1<<j);先预处理出len[i][j]表示第i个字符串与第j个字符串组合能匹配的最大字符数用一个数的二进制来表示那些字符串,那些字符串还没有选,即二进制位为1 的表示已经选了,为0的表示还没有选Dp[i][j]代表当选取的字符串为i状态,且最后一个选取的字符串是第j个字符串时的最优值状态转移:枚举某个状态时,枚举一个已选的字符串(即当前状态二进制位为1的位 Read More
posted @ 2012-08-08 19:04
To be an ACMan
Views(697)
Comments(2)
Diggs(0)

浙公网安备 33010602011771号