NYoj
lhrsdl
这个作者很懒,什么都没留下…
展开
-
DP入门50题(4)——NYoj79 导弹拦截
题意:一种导弹拦截系统,有个缺陷,第一发炮弹能达到任意高度,但以后的炮弹都要比上一发低,问某政府只能买一套系统,最多能拦截几发炮弹。 思路:导弹拦截是经典动态规划题,这个问题其实可以看做是最长递减序列,每一发炮弹都要低于前一发的高度。那就用dp[i][j]表示j之前有多少个比i小的炮弹,取最大的就是当前dp[i][j]的值。也可以看做最长上升序列把判断条件反过来而已。代码: 这里用一维写的#i原创 2015-02-24 16:53:07 · 606 阅读 · 0 评论 -
DP入门50题(7)——NYoj37 回文字符串
题意:给一个字符串,让你添加字符使其变成回文字符串,问最少添加几个 思路:开始真没思路,后来看别人的提示,可以把这个问题转化成上一题的思路——最长公共子序列问题。 就是把这个串反转,然后求这两个串的最长公共子序列,用原串长度减去最长公共子序列长度不就是要添加的字符个数啦! 代码:#include <iostream>#include <cstdio>#include <string>#原创 2015-02-24 17:32:21 · 616 阅读 · 0 评论 -
DP入门50题(2)——NYoj252 01串
题意: 知道某一01串的长度,但他想知道不含有“11”子串的这种长度的01串共有多少个,他希望你能帮帮他。 注:01串的长度为2时,有3种:00,01,10。思路: 从长度为2开始考虑,有00,01,10三种; 长度为3,有000,001,010,101,100五种; 长度为4,有0000,0001,0010,1010,0101,1001,1原创 2015-02-23 22:09:28 · 628 阅读 · 0 评论 -
DP入门50题(5)——NYoj 17 单调递增最长子序列
题意:正好跟上题导弹拦截相反,只不过单调递增而已。 解法:就是上一题的a[j]>a[i]改成a[j]#include <iostream>#include <cstdio>#include <cstring>using namespace std;int Max(int a,int b){return a>b?a:b;}char s[10002];int n,dp[20002],an原创 2015-02-24 17:09:39 · 545 阅读 · 0 评论 -
NYoj_DP_289苹果(01背包)
题意:裸01背包,第一行给出n个苹果和容量为m的背包,接下来n行为每个苹果的重量和价值。输出背包能装下的最大价值为多少。 思路:dp公式:dp[j] = max(dp[j],dp[j-cost[i]]+v[i]); 其中dp[j]的值代表当前背包剩余容量为j时最大价值。dp[j-cost[i]]为当前背包装入苹果i的时候(此时背包剩余容量为j-cost[i]),那价值就为dp[j-cost[i]原创 2015-04-08 21:23:17 · 651 阅读 · 0 评论