
poj
文章平均质量分 66
阿欣
喜欢技术,喜欢生活,喜欢自由,喜欢快乐,喜欢旅游,喜欢你,Kiki.
展开
-
poj 1742 多重背包变种 对时间要求特别严格
1 多重背包物品二进制拆分后01背包#include #include #include using namespace std;#define MAX_V (100+1)#define MAX_F (100000+1)int A[MAX_V],C[MAX_V];int Value[MAX_F];bool F[MAX_F];int n,m;#define printf原创 2013-09-05 18:24:17 · 548 阅读 · 0 评论 -
poj 1836 Alignment
是POJ2533的扩展题。题意不难,令到原队列的最少士兵出列后,使得新队列任意一个士兵都能看到左边或者右边的无穷远处。就是使新队列呈三角形分布就对了。士兵的排列就是如附件所示所示:图片中的蓝色士兵的身高和红色士兵的身高是完全没有关系的。要求最少出列数,就是留队士兵人数最大,如图:即左边的递增序列人数和右边的递减序列人数之和最大因而可转化为求“最长不降子序列”和“最长不升原创 2013-09-09 19:51:32 · 591 阅读 · 0 评论 -
poj 1260 Pearls
用高一等级的代替低一等级的必须是连续代替。例如 3 5, 90 7, 100 12 要想代替3个5价值的首先考虑 用7价值的代替,因为 3*7=21 (3+10)* 5 =65 显然比较合算,这样就不需要考虑用12价值的那个代替了,因为前面已经有了最优解,也就是说相互代替不会跳跃。证明这一点后开始分析,用sum[i]表示前i中珠宝总数,对于第i等级珠宝,ans[i]表示他的最优解,那么an原创 2013-09-09 22:51:13 · 557 阅读 · 0 评论 -
poj 1664 放苹果 递归
把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。对于测试数据17 3即把7个苹果放在三哥盘子里,显然按照下列顺序放就可以避免重复0 0 70 1 60 2 5 0 3 41 1 51 2 41 3 3 2 2 3就是后一个数目不小原创 2013-09-10 15:54:58 · 641 阅读 · 0 评论 -
poj 1661 Help Jimmy
测试数据:23 8 7 26 14 64 10 45 14 21 6 10 202 3 5结果:1710代码:Source CodeProblem: 1661 User: csjiaxinMemory: 276K Time: 16MSLanguage: C++ Res原创 2013-09-11 11:46:31 · 611 阅读 · 0 评论 -
poj 2083 Fractal 递归
#include #include #include using namespace std;#define MAX_N 1000char r[MAX_N][MAX_N];int solve(int n,int si,int sj){ if( n == 1) { r[si][sj]='X'; return 1; } int m = 0; m =solve(n原创 2013-09-10 19:36:38 · 736 阅读 · 0 评论 -
动态规划 01背包 poj 1745
//初始值 F[0][0]=1;//状态方程 m = N[i] % k ; F[i][j] = F[i-1][ (j+m+k) %k] || F[i-1] [ (j-m+k) %k] //+k是为了不出现负坐标#include #include #include using namespace std;#define MAX_N (10000+1)#define M原创 2013-09-04 22:36:40 · 587 阅读 · 0 评论 -
动态规则 01背包问题 poj 1837 3628
poj 3628 #include #include #include// i放进v容量的袋子里,所能取得的最大值// F[i-1][v] 意思是当前物品i不放进去,// F[i-1][v-c[i]] 是当前物品放进去,则前i-1个物品放进容易V-c[i]容量内能取得的最大值F[i-1][v-c[i]]//F[i][v] =max{ F[i-1][v],F[i-1][V-c[i]原创 2013-09-04 18:59:28 · 718 阅读 · 0 评论 -
动态规划 多重背包 优化 poj 1276
题意:这道题的意思是给你一堆钱,各种面值的都有,比如10块的5张,5块的3张,2块的1张,请找出利用这些钱可以凑成的最接近且小于给定的数字cash的数额,比如cash=33块。我们可以取3张10块+2张1块=32,就是我们可以找到的那个最接近且小于33的数额。思路:dp[i]用来表示第i大小金额的值是否能够取到。参考:http://cavenkaka.ite原创 2013-09-05 00:24:47 · 740 阅读 · 0 评论 -
poj 3624 最基本01背包问题
#include #include#include using namespace std;#define MAX_V (4000+1)#define MAX_F (13000+1)int n,m;int W[MAX_V];int D[MAX_V];int F[MAX_F];int main(){ while(cin>>n>>m) { for(int i=1;原创 2013-09-05 15:59:12 · 564 阅读 · 0 评论 -
poj 3356 AGTC 经典动态规划题
详细讲解可见挑战编程 11.2编辑距离所讲解的,非常充分完整。原创 2013-09-11 22:46:24 · 629 阅读 · 0 评论 -
poj 1631 Bridging signals 最长上升子序列的O(n*lgn)方法
在普通动规基础上,设一个数组d[i],表示到现在为止长度为i的子序列的末尾数字的最小值.显然对于求最长上升子序列由b[i-1] 代码:#include #include #include using namespace std;int n;#define MAX_N 40001int N[MAX_N];int bl=0;int b[MAX_N];in原创 2013-09-12 17:29:03 · 860 阅读 · 0 评论 -
poj 1088 滑雪 DP
一个r*c 2维数组,包含高度,求最长下降子序列的长度,每个节点只能移动上下左右四个格子。测试数据:5 51 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 91 111 21 21 3 1 3 22 21 2 4 32 2 1 2 3 44 77 6 5原创 2013-09-13 16:35:50 · 799 阅读 · 0 评论 -
poj 1942 Paths on a Grid 求组合数mCn的方法
unsigned int comb(unsigned a,unsigned b) { if(b > a-b) b= a-b; double result = 1; while(b>0) { result *= (原创 2013-09-14 10:59:07 · 719 阅读 · 0 评论 -
poj 1019 Number Sequence
#include #include using namespace std;int D[100001];int get_digit(int k) //k占用几位{ if(D[k] != 0) return D[k]; int tk=0; while(k>0) { tk++; k /= 10; } D[k] = tk; return D[k];}i原创 2013-09-14 12:16:28 · 565 阅读 · 0 评论 -
poj 1083 Moving Tables
测试数据10101 23 45 67 89 1020 2224 2628 3032 3436 38102 34 56 78 910 1112 1314 1516 1718 1920 211010 30020 29030 28040 27050 26060 25070 24080 23090 220100 2104097原创 2013-09-16 15:21:59 · 1010 阅读 · 0 评论 -
poj 3267 The Cow Lexicon DP 动态规划
dp[i]表示从message中第i个字符开始,到第L个字符(结尾处)这段区间所删除的字符数,初始化为dp[L]=0由于我的程序是从message尾部向头部检索匹配,所以是下面的状态方程: 从程序可以看出,第i个位置到L所删除的字符数,总是先取最坏情况,只有可以匹配单词时才进入第二条方程进行状态优化更新。 第一条方程不难理解,只要弄懂dp[i]的意义就能原创 2013-09-09 19:01:56 · 604 阅读 · 0 评论 -
poj DP LCS 最长公共子序列汇总
【POJ1080】Human Gene Functionspoj1458 Common Subsequencepoj 2127 LCIS 最长上升子序列poj 2250 Compromise 最长公共子序列poj 2533 Longest Ordered Subsequence原创 2013-09-08 22:31:17 · 1235 阅读 · 0 评论 -
poj 1014 Dividing 多重背包问题
问是否平分N的物品的价值先求出N个物品的价值总和如何是奇数,则一定不能平分如果是偶数,则half = total/2既题目转化为给定多重背包的N个物品,为是否能装满half的背包,如果可以,则可以平分。#include #include #include using namespace std;#define MAX_V (6+1)#defin原创 2013-09-05 23:49:33 · 665 阅读 · 0 评论 -
poj 2063 Investment 完全背包问题
上来根据题目盲写完全背包第一版代码#include #include #include #include using namespace std;int BONDS[11],INTERNEST[11];int START,YEARS;#define MAX_F 3800000int F[MAX_F];int G[MAX_F];#define printf //原创 2013-09-06 19:36:44 · 651 阅读 · 0 评论 -
poj 1384 Piggy-Bank 多重背包问题
经典多重背包都是已知V求最大值本题是已知V,求最小价值只需把状态方程里的 max变成min即可状态变量F[0..v]初始值不再是最大值的0了,请注意。#include #include #include using namespace std;#define MAX_V (500+1)#define MAX_F (10000+1)int E,F,N;i原创 2013-09-06 12:26:22 · 521 阅读 · 0 评论 -
poj 1976 A Mini Locomotive 有依赖的背包问题
受到背包九讲 有依赖关系的背包问题的启发,最终转化为01背包问题求解1 2 ... N个车厢假设M=2即如果选择1,则必须选择2如果选择2,则必须选择3则先把1,2生成一个新的物品1把2,3生成一个新的物品21,2...N这些物品就可以被01背包选择了,但这些物品选取时,还有一些小的限制。注意下标搞清楚就好了。#include原创 2013-09-06 15:50:33 · 766 阅读 · 0 评论 -
poj 背包问题 提好汇总
1014 Dviding12761384 Piggy-Bank1742 Coins183719763624//------------------------------------------未完成,下面可能是,待验证1141 Brackets Sequence20632082218421812392原创 2013-09-06 17:10:52 · 1281 阅读 · 0 评论 -
poj 2392 多重背包
记得先排序Source CodeProblem: 2392 User: csjiaxinMemory: 652K Time: 79MSLanguage: C++ Result: AcceptedSource Code#include #include #include #include using namespace std;#define MAX_V (400*1原创 2013-09-07 14:19:17 · 640 阅读 · 0 评论 -
poj 3211 Washing Clothes 01背包问题
对于 5 6 7 8 9 先按带价由高到低顺序排序,一人选一个,并不能得到最接近的。比如 9 8 7 6 59 6 58 7所需时间9 + 6+5 = 20而9 87 6 5所需 时间 17少于20第一版(错误)#include #include #include #include #include using namespace s原创 2013-09-07 15:44:56 · 618 阅读 · 0 评论 -
poj 2181
#include #include #include using namespace std;#define MAX_P (150000+10)int P[MAX_P];//strength <=500int p;int main(){ while(cin>>p) { int sum=0; memset(P,0,sizeof(P)); for(int i原创 2013-09-07 11:45:22 · 618 阅读 · 0 评论 -
poj 1080 Human Gene Functions
LCS的变形而已注意LCS的子串可以是离散的,不必连续,用动态规划 设dp[i][j]为取s1第i个字符,s2第j个字符时的最大分值则决定dp为最优的情况有三种(score[][]为s1[i]和s2[j]两符号的分数):1、 s1取第i个字母,s2取“ - ”: dp[i-1][j]+score[ s1[i-1] ]['-'];2、 s1取“ -原创 2013-09-07 23:42:25 · 551 阅读 · 0 评论 -
poj 1159 Palindrome 动态规划
lstar@ubuntu:~/ds/poj$ ./a.out 2lstar@ubuntu:~/ds/poj$ cat 1159_2.in.dat 4Ab3AAb33A这种对奇数的情况也需要特殊考虑,如果以中间的3为分界,则返回2,其实最小应该是13L7YWY 最短匹配 3L7YWY7L3 只需要3个,且并不是以原中心点为7 Y W进行扩展的,所以自己推断的状原创 2013-09-08 11:57:53 · 882 阅读 · 0 评论 -
poj 1458 Common Subsequence 最基本的LCS 最长公共子序列
刚好对应算法导论 15.4 最长公共子序列#include #include #include using namespace std;string strA,strB;#define MAX_N (2000+1)unsigned short dp[MAX_N][MAX_N]; int lcs(string stra,string strb){ int la=stra.原创 2013-09-08 12:43:45 · 529 阅读 · 0 评论 -
poj 2184 Cow Exhibition
参考:http://www.cnblogs.com/rainydays/archive/2012/07/04/2576077.html题意:给定一些奶牛,每个牛有s和f两个属性值,有正有负,要求选出一些牛,使得这些牛的两种属性的和的加和最大,且这些牛的两种属性分别求加和不能为负。分析:dp,开始想到dp[i][s][f],表示前i头牛能否实现属性和分别为s,f。原创 2013-09-07 17:00:41 · 554 阅读 · 0 评论 -
poj 2127 Greatest Common Increasing Subsequence
我们假设数组A和B分别为这两个序列,我们定义状态dp[i][j]表示以A[i]和B[j]结尾的并且LCIS的最后一个元素小于A[i]的值,也就是说dp[i][j]并不一定是串A[1--i]和串B[1--j]的LCIS,因为多了一个限制就是该LCIS的最后一个元素必须小于A[i]。那么闲杂我们看看如何来进行状态转移呢? 如果A[i] == B[j],那么dp[i][j] = max(原创 2013-09-08 16:46:21 · 683 阅读 · 0 评论 -
poj 2533 数组的最长上升子序列
#include #include#include using namespace std;#define MAX_N (1000+1)int N[MAX_N];int dp[MAX_N]; //dp[i] 以N[i]为最大元素的刚好截止于i的 lcis最大长度// int n;int main(){ while(cin>>n) { int maxp; for原创 2013-09-08 22:45:39 · 746 阅读 · 0 评论 -
poj 1934 Trip 所有最长公共子序列 仍然WA
Source CodeProblem: 1934 User: csjiaxinMemory: N/A Time: N/ALanguage: G++ Result: Time Limit ExceededSource Code#include #include #include#include #include using namespace std;#defin原创 2013-09-08 23:54:08 · 636 阅读 · 0 评论 -
poj 1178 Camelot floyd+枚举
参考:http://blog.youkuaiyun.com/lijiecsu/article/details/7579855使用枚举法如果确定了最终的位置、国王和骑士相遇的位置、国王与哪个骑士相遇三个要素,则最少移动步数就确定了。最终的位置共有64种,国王和骑士相遇的位置也有64种,设有N个骑士,则国王与哪个骑士相遇有N种,则枚举O(64*64*N)对某个最终位置d原创 2013-09-17 10:33:42 · 692 阅读 · 0 评论