![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
子序列问题
IQ_IT
这个作者很懒,什么都没留下…
展开
-
hdu1257 最少拦截系统
求一个序列中不升子序列的个数,贪心思想。和南京理工大学第八届校赛sequence相似,那个题求的是不降子序列个数,可以看一下加深理解题目链接。下面是本题代码:#include #include #includeusing namespace std;const int maxn=30000;int dp[1010],m;int main(){ int n,b;原创 2016-05-02 20:59:10 · 268 阅读 · 0 评论 -
南京理工校赛 sequence
思路:求一个序列中不降子序列的个数,贪心思想,动规求解#include #include #includeusing namespace std;int dp[10100],m;int main(){ int n,b,t; cin>>t; while(t--) { scanf("%d",&n); m=0;原创 2016-05-02 18:50:25 · 340 阅读 · 0 评论 -
hdu 1087 Super Jumping! Jumping! Jumping!
又是一道模板题!!#include #include const int maxn=1010;int a[maxn],dp[maxn],m,Max;void LICS(){ memset(dp,0,sizeof(dp)); for(int i=0;i<m;i++) { dp[i]=a[i]; for(int j=0;j<i;j++) if(a[原创 2016-05-02 18:08:20 · 311 阅读 · 0 评论 -
hdu 1069 Monkey and Banana
题意:每行给三个数,可以任意选择为长宽高,求长宽递减,高度和最大的排序方式的高度和。思路就是把所有情况列出来,然后套最长子序列模板就可以了。每行数据可以分成三种情况,开始不理解长度为何取最大值(除去已选的高度值),后来才理解,如果不取最大值,一行数据就不止3种情况了。#include#include#include#includeusing namespace std;str原创 2016-05-02 17:58:17 · 360 阅读 · 0 评论 -
hdu 1029 Ignatius and the Princess IV
#include#include#include#includeusing namespace std;int dp[1000010];int main(){ int n,b,num; while(scanf("%d",&n)!=EOF) { num=0; memset(dp,0,sizeof(dp)); int原创 2016-05-02 16:36:45 · 353 阅读 · 0 评论 -
hdu 1024 Max Sum Plus Plus
题意:在一个序列中,求出m个不想交的子序列,使这m个序列的和最大。题意好理解,但递归方程的表示有些令我迷茫看了下大牛们的题解,在这里说一下我的看法。这里我结合代码来说一下: dp[i][j]=Max(dp[i][j-1]+a[j] , max( dp[i-1][k] ) + a[j] ) 0dp[i][j]表示前j个数分成i组时的最大值;dp[i][j-1]+a[j]表原创 2016-05-02 16:20:29 · 455 阅读 · 0 评论 -
hdu 1160 FatMouse's Speed
题目大意就是求出两条件分别满足上升和下降的最长子序列。解题思路:结构上套模板,细节上的区别有1、想将一个条件排好序,相当于已经判别了一个条件;2,、因为题目要求的是每个数在原序列的位置,所以需要在结构体中提前记录位置,以便于排序后仍能找到位置。另一点是在寻找最长子序列时,记录是由前面哪一个字符发展而来的,以便于能够知道各在排序后的位置。#include #include#inc原创 2016-05-02 15:13:56 · 381 阅读 · 0 评论