![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
mig_davidli
稍微明白点算法和C++,参加过几个小项目。。
展开
-
【排序+dp】HDU 1160——FatMouse Speed
来源:点击打开链接这个题是special judge,输出一个合法结果就行,不用按照样例来的。。先对体重和速度进行排序:定义状态dp[i]表示以当前mouse为终点形成的最长speed序列长度状态dp[j]表示i之前的符合要求的mouse为终点的最长的speed序列长度那么有状态转移方程,if(dp[i]; 就是个lis问题了.#include #incl原创 2013-08-16 20:30:50 · 1123 阅读 · 0 评论 -
【DP复习5】HDU 2084——数塔
#include #include using namespace std;int dp[105][105];int max(int a,int b){ if(a>b) return a; else return b;}int main(){ int testcase; cin>>testcase; while(testcase--) { int fl原创 2013-02-26 16:57:15 · 556 阅读 · 0 评论 -
【DP复习2】HDU 1003——Max Sum
题目:点击打开链接这个问题是DP,但是不需要数组就可以做,应用startpos,endpos记录位置。tmp读数,now计算当前记录的和,判当前+读入的数是否小于读入的数,如果越读越小的话,那么就换一个位置,如果增大,说明对MAX是有利的,移动endpos就可以了,最后和maxsum进行比较。附一组Trick数据:5 -1 -2 -3 -4 -5答案是 -1 1 1.#incl原创 2013-02-22 17:47:58 · 780 阅读 · 0 评论 -
【DP复习3—完全背包】HDU 1114——Piggy-Bank
题目:点击打开链接完全背包,与0-1背包不同的是第二次遍历的顺序,倒过来就行,求最小值就改成MIN,其他的没什么变化。另外要注意初始化的值。因为题目要求恰好装满,而且要求的值要尽量小,所以将dp[0]设为0,其余设为无穷大(如果没有要求恰好装满的话,全0)。最后别忘了判断时减去初始给的值。#include #include using namespace std;con原创 2013-02-23 11:52:22 · 846 阅读 · 0 评论 -
【CodeCraft比赛】Problem 7——X-man(最长公共子串LCS变种)
题目:点击打开链接Question 7Problem StatementDr. Charles Xavier is trying to check the correlation between the DNA samples of Magneto and Wolverine. Both the DNAs are of length N, and can be原创 2013-02-19 08:53:10 · 1039 阅读 · 0 评论 -
【DP复习4—LCS】HDU1159——Common Subsequence
题目:点击打开链接没什么多说的,LCS问题盲打过,但我CE了两次,因为把I和J搞混了。。另外注意LCS是中间可以有间隔的,KMP则没有。另外别忘了前两天博客中曾经提到的二分法。#include #include #include using namespace std;int max(int a,int b){ return a>b?a:b;}int dp[3400][原创 2013-02-23 11:56:29 · 690 阅读 · 0 评论 -
【斐波那契DP】HDU 4639——HeHe
题目:点击打开链接多校练习赛4的简单题,但是比赛的时候想到了推导公式f(n)=f(n-1)+f(n-2)(就是斐波那契数列),最后却没做出来。首先手写一下he(不是hehe)连续时的规律。0-1 1-1 2-2 3-3 4-5,斐波那契无误。比赛的时候没有分清楚连续的he和间断的he的不同,只有连续的he才能用斐波那契数列来表示,而间断点应该重新计算he出现的次数,最后根据组合数的原理原创 2013-08-03 11:20:44 · 1513 阅读 · 0 评论 -
【最长上升子序列】HDU 1087——Super Jumping! Jumping! Jumping!
来源:点击打开链接最长上升子序列的考察,是一个简单的DP问题。我们每一次求出从第一个数到当前这个数的最长上升子序列,直至遍历到最后一个数字为止,然后再取dp数组里最大的那个即为整个序列的最长上升子序列。我们用dp[i]来存放序列1-i的最长上升子序列的长度,那么dp[i]=max(1,dp[j])+1,(j∈[1, i-1]); 显然dp[1]=1,我们从i=2开始遍历后面的元素即可。这个原创 2013-08-03 19:26:13 · 1126 阅读 · 0 评论 -
【找规律】HDU 4662——MU Puzzle
来源:点击打开链接这个题目的来源是人工智能领域MU猜想。比赛的时候也参考了相关资料,可是最后差一点没有把规律推出来。注意到以下几个性质。第一,MI怎么变换M永远只能在第一位。第二,因为变换时只能在I和U之间变换,因此,除了第一个是M以外,后面如果有字符串不是U、I以内的话永远不可能变换得到。第三,U可以看成是3个I,无论是I先变换成U再操作还是转化成一定数量的I,最后再准换成一定数量的U即原创 2013-08-14 15:32:55 · 1898 阅读 · 0 评论 -
【CodingTrip - 携程编程大赛第一场】1002 括号匹配
来源:HDU携程编程大赛第一场。括号匹配,一个DP经典问题,网上到处都是题解。用 dp[i][j] 表示从位置 i 到字符位置 j 所需的最少括号数。#include #include #include #include using namespace std;int dp[109][109];bool islegal(char a,char b){ if原创 2014-04-10 21:04:00 · 1968 阅读 · 0 评论