2013年3月24日

poj1038

摘要: 黑书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 阅读(243) 评论(0) 推荐(0) 编辑

poj2404

摘要: 题意:给定一张图,要求从起点出发走遍每一条边并回到起点的最短路径。。思路:由一笔画问题可知,想满足题意每个点必须是偶点(度为偶数),所以首先用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 阅读(271) 评论(0) 推荐(0) 编辑

poj3254

摘要: 题目大意:给你一个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 阅读(220) 评论(0) 推荐(0) 编辑

poj2663

摘要: 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 阅读(231) 评论(0) 推荐(0) 编辑

poj2430

摘要: 题目意思:一个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 阅读(219) 评论(0) 推荐(0) 编辑

poj1949

摘要: 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 阅读(174) 评论(0) 推荐(0) 编辑

poj1853

摘要: 题意:给一堆物品分成两堆,两堆总重量相差不到百分之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 阅读(368) 评论(0) 推荐(0) 编辑

poj1821

摘要: 题意大致是有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 阅读(230) 评论(0) 推荐(0) 编辑

poj1770

摘要: 题目意思:给定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 阅读(178) 评论(0) 推荐(0) 编辑