
动态规划
文章平均质量分 71
bookybooky
http://blog.163.com/happyliyifan126/
展开
-
一些以前没做的简单DP
1- POJ 1458 最长公共子序列长度 状态转移方程:dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]); 2- POJ 1159 给定一个字符,最少插入多少字符使其成为回文串 滚动数组d[i % 2][j] = d[(i - 1) % 2][j] + d[i % 2][j - 1]作用是节省空间,在时间上没有优势。 状态转移方程:dp[i % 2][j]原创 2015-01-10 21:47:28 · 506 阅读 · 0 评论 -
POJ 1276 : Cash Machine - 多重背包
最基础的多重背包#include#include#includeusing namespace std;const int N=100005;int cash,k,n[N],w[N],c[N],dp[N],cnt[N]; //cnt[]限制取bills的个数int main(){ int i,j; while(~scanf("%d%d",&cash,&k)){ for(i=0;i scanf原创 2015-01-10 21:46:41 · 504 阅读 · 0 评论 -
POJ 3176 : Triangle - 水DP
额,算是完全我自个儿敲出的第一道DP了吧……好水的DP~瞬间有那么点信心了?同学报告里的第一个题。题意:拿图说话,题意看图便好理解了。Explanation of the sample: 7 * 3 8 * 8 1 0 * 2 7 4 4 * 4 5 2 6原创 2015-01-10 21:46:45 · 471 阅读 · 0 评论 -
POJ 1018:Communication System - DP
POJ 1018 题意: 某公司要建立一套通信系统,有n个厂家提供生产所需要的网线。而每个厂家生产的同种网线都会存在两个方面的差别:带宽bandwidths 和 价格prices。 现在需要在每个厂家选择一件网线,考虑到性价比问题,要求所挑选出来的n件设备,要使得B/P最大。输出这个比值保留3位小数。(其中B为这n件设备的带宽的最小值,P为这n件设备的总价。)思路: dp[i][j]:取到第 i原创 2015-01-10 21:47:32 · 563 阅读 · 0 评论 -
POJ 2677 / ZOJ 2581 : Tour - DP
双调欧几里德旅行商问题,(寒假马拉松 第一场 J题)dps[i][j]代表走的快的人到达i,走的慢的人到达j时的最小距离。当连接新的点i+1时,如果给j,则j就超过了i,成为了更快的人,下一状态变成dp[i+1][i]。如果给i,给j保持不变,下一状态为dp[i+1][j]。由此得到递推公式:dps[i+1][i] = min(dps[i+1][i], dps[i][j] + dis(j, i+1原创 2015-01-10 21:46:20 · 584 阅读 · 0 评论 -
POJ 3132 / ZOJ 2822 : Sum of Different Primes - 动态规划,01背包,素数筛
题意:输入两个整数:n(输出这样的素数集合的个数。分析:现在令p[]为[2....1200]的素数表;f[i][j]为j拆分成i个素数和的方案数。ip[]用筛选法求,长num,每输入一对n和k用动态规划求出k个不同素数和为n的方案数。 枚举p[i], 按递减顺序枚举素数个数j(j=14…1)。 按递减顺序枚举前j个素数的和s(s=1199…p[i])。 累计p[i]作为第j个素数的方案总数f[j]原创 2015-01-10 21:45:00 · 749 阅读 · 0 评论 -
POJ 2533 : Longest Ordered Subsequence - LIS问题
最长不降子序列问题, 同学报告中的题。一道简单的DP。题意:给定 n 个整数 A1A2....An,按从左到右的顺序选出尽量多的整数,组成一个上升子序列,输出最长子序列的长度。分析:I.最简单思路,d[i]表示从左到第 i 个数选出最长的子序列长度,d[i]=max(0,d[j])+1 (jII.进一步思考,发现我们的程序造成了大量的浪费:对于每一个 d[i],j 都会从 0 到 i-1 开始逐步原创 2015-01-10 21:46:48 · 600 阅读 · 0 评论 -
POJ 1631 : Bridging signals - 最长上升子序列 O(nlog n)
题目大意:给定两个相同序列,单个序列中数字不会重复,x出现在y位置,即代表x与y可以连线。最后要从这个序列中尽量多地选择连线并保证连线不交叉。思路:一个序列已经固定,那只要保证另一列被选择的数是递增的就不会相交了,画几个模拟就明白,模拟过程参考http://www.cnblogs.com/zhsl/archive/2013/05/21/3089983.html,红色航线是合法的,那么他们满足什么规原创 2015-01-10 21:46:52 · 699 阅读 · 0 评论 -
POJ 1050/ ZOJ 1074:To the Max - DP求子矩阵和
题意:即最大子段和问题在二维空间上的推广思路:一维的情况:设有数组a0,a1…an,找除其中连续的子段,使它们的和达到最大。假如对于子段:9 2 -16 2dp[i]表示:以ai结尾的子段中的最大子段和。在已知dp[i]的情况下,求dp[i+1]的方法是:如果dp[i] > 0,dp[i + 1] = dp[i] + ai(继续在前一个子段上加上ai);否则dp[i + 1] = ai(不加上前面原创 2015-01-10 22:28:03 · 738 阅读 · 0 评论 -
POJ 2192 / ZOJ 2401 : Zipper - DP
大致题意: 给定三个字符串A、B、C;判断C能否由AB中的字符组成,同时这个组合后的字符顺序必须是A,B中原来的顺序,不能逆序。也就是C是否能由A、B穿插组成。 例如 A:mnl,B:xyz;如果C为mnxylz,就符合题意;如果C为mxnzly,就不符合题意,原因是z与y顺序不是B中顺序。 输入: 第一行n,表示数据组数 每组数据一行,三个字符串,中间用空格原创 2015-03-05 22:17:20 · 645 阅读 · 0 评论