【动态规划】
__流影
读书、探知、成长、做有意义的事!
展开
-
苹果 南工289
苹果时间限制:3000 ms | 内存限制:65535 KB难度:2描述ctest有n个苹果,要将它放入容量为v的背包。给出第i个苹果的大小和价钱,求出能放入背包的苹果的总价钱最大值。输入有多组测试数据,每组测试数据第一行为2个正整数,分别代表苹果的个数n和背包的容量v,n、v同时为0时结束测试,此时不输出。接下来的n行,每行2个原创 2013-04-15 10:52:52 · 774 阅读 · 0 评论 -
南工236 心急的C小加
心急的C小加:先把所给的木棒按照长度从小到大排序,题目所求即转化为在排好的顺序中,求最长子序列的个数,每求一个标记一个,时间加1 #include #include #include #include using namespace std;struct mypair{ int len; int wgt;};bool cmp(const mypair& z1,co原创 2013-04-09 13:27:04 · 626 阅读 · 0 评论 -
矩形嵌套 南工16
题目链接:here~~先排序再求才AC了#include #include #include #include using namespace std;struct cd{ int x, y; bool operator < (cd r)const { if (x==r.x) return y<r.y;原创 2013-04-18 21:52:53 · 631 阅读 · 0 评论 -
单调递增最长子序列 南工17
和拦截导弹一样的题#include #include #include using namespace std;# include int res[10001];char s[10001];int main(){ int n, i, j, len, max; char c; // freopen("in.txt", "r", stdin); sca原创 2013-04-18 12:51:39 · 535 阅读 · 0 评论 -
最长公共子序列 南工36
题目链接:here~~比较第一个串s1的第i个字符与串s2的第j个字符是否相等,如果相等:res[i][j]=res[i-1][j-1]+1;(前i个串s1的字符和前j个串s2的字符的最长公共子序列长度=前i-1个串s1的字符和前j-1个串s2的字符的最长公共子序列长度+1);如果不相等:res[i][j]=max(res[i-1][j], res[i][j-1]);(前i个串s1的字符和原创 2013-04-18 10:58:27 · 501 阅读 · 0 评论 -
擅长排列的小明II 南工469
题目链接:南工469(为了简便起见,我们用Ai代表第i个数字)由于A1一直是1,所以A2只能是2或3。1.当A2=2时,从A2到An的排列(2~n)相当于从A1到An-1的排列(1~n-1)(把每个数字都加1),一共有f[n-1]种情况。2.当A2=3时,A3可能为2,4,5。 当A3=2时,A4一定等于4,此时从A4到An的排列(4~n)相当原创 2013-04-18 09:47:10 · 618 阅读 · 0 评论 -
邮票分你一半 南工456
题目链接:here~~这道题和zb的生日所求的一样,只不过把时间限制3秒改为了一秒,所以这题就不能用深度搜索做了,当然,也可以深度搜索加优化做,还是比较麻烦的,所以就用动态规划做,仔细想一下,这道题是0-1背包的题,将题目条件转化为用容量为total/2(total是所有邮票价值的总和)的背包装最多的邮票,接下来就不用说了吧!# include # include int res[10原创 2013-04-18 08:59:00 · 619 阅读 · 0 评论 -
作业题 南工201
题目链接:here~~以后做题要认真读题,搞清楚每个条件!这道题,是要求单调的最长子序列,单调可能递增,也可能递减,所以要把两个的都求出来比较一下!(这题和拦截导弹的那个题有点类似,可以参考一下!拦截导弹)#include #include #include #include #includeusing namespace std;struct con{ int原创 2013-04-17 08:07:40 · 645 阅读 · 0 评论 -
开心的小明 南工49
0-1背包# include # include using namespace std;int main(){ int N, n, m, a[30001], max, i, b, c, j;// freopen("in.txt", "r", stdin); cin>>N; while (N--) { cin>>n>>m; memset(a, 0, sizeo原创 2013-04-16 09:44:03 · 897 阅读 · 0 评论 -
拦截导弹 南工79
#include using namespace std;int main(){ int n, m, max, i, j; // freopen("in.txt", "r", stdin); cin>>n; while (n--) { int a[21]={0}, b[21]={0}; cin>>m; fo原创 2013-04-15 18:53:33 · 752 阅读 · 0 评论 -
NYOJ 单调递增子序列(二) 南工214
这是一个很好的题目。题目的算法还是比较容易看出来的,就是求最长上升子序列的长度。不过这一题的数据规模最大可以达到40000,经典的O(n^2)的动态规划算法明显会超时。我们需要寻找更好的方法来解决是最长上升子序列问题。先回顾经典的O(n^2)的动态规划算法,设A[i]表示序列中的第i个数,F[i]表示从1到i这一段中以i结尾的最长上升子序列的长度,初始时设F[i] = 0(i = 1, 2原创 2013-04-19 10:41:12 · 490 阅读 · 0 评论 -
动态规划原理总结
动态规划 关健字:阶段 状态 决策 函数递推式 摘要: 动态规划是解决多阶段决策最优化问题的一种思想方法。所谓“动态”,指的是在问题的多阶段决策中,按某一顺序,根据每一步所选决策的不同,将随即引起状态的转移,最终在变化的状态中产生一个决策序列。动态规划就是为了使产生的决策序列在符合某种条件下达到最优。动态规划思想近来在各类型信息学竞赛中频繁出现,它的应用也越来越受人重视。原创 2013-04-15 10:08:56 · 1453 阅读 · 0 评论 -
NYOJ 15 括号匹配(二) dp
题目连接:check here~题意是说给一个字符串,包含'(',')','[',']'四种字符,判断至少需要添加几个字符使所给字符串括号匹配。区间型动态规划,设dp[i][j]表示在字符串s中i位置到j位置所需要添加的最少的字符(i 有两种情况:1、dp[i][j] = dp[i+1][j] + 1; 表示:在i到j之间没有与s[i]相匹配的括号,则必须添加一个字符来与之匹配原创 2014-05-09 11:11:26 · 1728 阅读 · 0 评论