摘要:
黑书138面的题目。。典型的状态压缩dp。而且神奇的用了3进制。。思路看黑书了。。直接上code 1 /* 2 State:Accepted 3 Time:2013.3.23 14:10 4 */ 5 #include<iostream> 6 #include<cstring> 7 #include<cstdlib> 8 #include<cstdio> 9 #include<fstream> 10 #include<algorithm> 11 #define M0(a) memset(a ,0,sizeof(a)) 12
阅读全文
posted @ 2013-03-24 00:51
yzcstc
阅读(249)
推荐(0)
摘要:
题意:给定一张图,要求从起点出发走遍每一条边并回到起点的最短路径。。思路:由一笔画问题可知,想满足题意每个点必须是偶点(度为偶数),所以首先用floyed做一遍最短路, 找到奇点之间的最短路径。。 接下来便是用状态压缩dp就可决解。。 1 /* 2 State:Accepted 3 Time:2013-03-21 14:50:26 4 */ 5 #include<cstdio> 6 #include<cstdlib> 7 #include<fstream> 8 #include<queue> 9 #include<stack>10 #
阅读全文
posted @ 2013-03-24 00:48
yzcstc
阅读(274)
推荐(0)
摘要:
题目大意:给你一个n*m的矩形,里面有些格子可以选取。。在可选取选取格子,要求不能相邻。。求方案数。。思路:状态压缩dp f[i][j]表示第i行状态为J的方案数 f[i][j] = sigma(f[i - 1][k]) 状态k表示的取法与j取的不相邻。且j为合法取法(与给定的不冲突) 1 /* 2 Time:2013-03-19 23:07:07 3 State:Accepted 4 */ 5 #include <iostream> 6 #include <cstring> 7 #include <cstdlib> 8 #include <cstdi
阅读全文
posted @ 2013-03-24 00:40
yzcstc
阅读(226)
推荐(0)
摘要:
poj2411的弱化版http://www.cnblogs.com/yzcstc/archive/2013/03/23/2977689.html 1 /* 2 State:Accepted 3 Time:2013-03-19 20:41:08 4 */ 5 #include <iostream> 6 #include <cstring> 7 #include <string> 8 #include <cstdlib> 9 #include <cstdio>10 #include <algorithm>11 #include
阅读全文
posted @ 2013-03-24 00:31
yzcstc
阅读(241)
推荐(0)
摘要:
题目意思:一个2*b的矩形上有n头牛,现在要用k个矩形覆盖牛。问最少覆盖的面积思路:状态压缩dp 因为b太大,所以得先离散化 f[i][j][k]表示前i列(有牛在的列),用了k个矩形,状态为K所用的最小面积 情况有:1.单独放1个矩形 2.单独放2个矩形 3.由前面放的延伸过来(1个或2个)情况多了点,写起来挺麻烦的。。 1 /* 2 State:Accepted 3 Time:2013-03-19 19:26:02 4 */ 5 #include<cstring> 6 #include<string> 7 #include<cs...
阅读全文
posted @ 2013-03-24 00:28
yzcstc
阅读(237)
推荐(0)
摘要:
poj水题。。直接上代码 1 /* 2 State:Accepted 3 Time:2013-03-12 00:42:31 4 */ 5 #include <iostream> 6 #include <cstring> 7 #include <string> 8 #include <cstdlib> 9 #include <cstdio>10 #include <algorithm>11 #include <cmath>12 #include <queue>13 using namespace st
阅读全文
posted @ 2013-03-24 00:19
yzcstc
阅读(181)
推荐(0)
摘要:
题意:给一堆物品分成两堆,两堆总重量相差不到百分之2。。。思路:本题是个好题。。很新颖的dp。。 因为n与给定的数字都不超过100,且允许误差为2%,所以我们可以进行放大,把小数化成整数,这样就可以进行dp了。。具体是把所有总数看成20000粉,然后按比率分配。。分配为进行背包。。/* State:Accepted Time:2013-03-12 00:12:37*/#include <iostream>#include <cstring>#include <string>#include <cstdlib>#include <cstdio
阅读全文
posted @ 2013-03-24 00:15
yzcstc
阅读(375)
推荐(0)
摘要:
题意大致是有k个粉刷匠,要粉刷n面墙,分别站在某一面墙si的前面,他们每个人只愿意刷li面墙,而且每刷一面需要给pi的工钱,题目要求最多能发多少工钱。思路:斜率优化dp 思路跟http://www.cnblogs.com/yzcstc/articles/2870355.html这里面说的差不多 1 /* 2 State:Accepted 3 Time:2013-03-11 23:03:01 4 */ 5 #include <iostream> 6 #include <cstring> 7 #include <string> 8 #include <cs
阅读全文
posted @ 2013-03-24 00:07
yzcstc
阅读(240)
推荐(0)
摘要:
题目意思:给定N个数,在给定M个数,现在在N中取数,满足取到得数任意两者之差都不等与M个数中的任意一个。。求最多取多少个数。思路:把有冲突的数之间连一条边(这样出来竟然没环,而是数,太神奇了) 然后进行树形dp f[i][0]表示第i个节点不取取得的最大个数 f[i][1]则表示取 f[i][0] = sigma(max(f[j][0],f[j][1])); f[i][1]= sigma(f[j][0]); j为i的子树。。 1 /* 2 Time:2013-03-11 09:23:07 3 State:Accepted 4 */ 5 #includ...
阅读全文
posted @ 2013-03-24 00:03
yzcstc
阅读(186)
推荐(0)