nyoj44 nyoj17 HDU1087 DP动规 连续字符串的和最大值 单调递增最长子序列 单调递增子序列最小个数 非连续最大递增子序列

原创 2016年09月09日 20:05:38
  1. 连续字符串的和最大值
    给定一整型数列{a1,a2…,an},找出连续非空子串{ax,ax+1,…,ay},使得该子序列的和最大,其中,1<=x<=y<=n。
    样例输入
    1
    5
    1 2 -1 3 -2
    样例输出
    5
#include<iostream>
#define max(a,b) a>b?a:b
using namespace std;
int a[1000005],dp[1000005];//dp存储的是当前数值最优和.也就是最优解.
int MAX(int n)
{
    dp[1]=a[1];
    int Max=dp[1];
    for(int i=2;i<=n;i++)
    {
        dp[i]=max(dp[i-1]+a[i],a[i]);
        Max=max(dp[i],Max);
    }
    return Max;
}
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        int n;
        cin>>n;
        for(int i=1;i<=n;i++)
            cin>>a[i];
        cout<<MAX(n)<<endl;
    }
}

2.单调递增最长子序列
求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4

#include<iostream>
#include<algorithm>
#include<math.h>
#include<string>
#include<string.h>
#include<stdio.h>
#include<queue>
using namespace std;
//动态规划
char str[10005];//存储字符串
int num[10005];//存储前i位字符串中最长递增子序列的长度
int main()
{
    int N;//N组数据
    scanf("%d",&N);
    while(N--)

    {
        memset(str,'\0',sizeof(str));
        memset(num,0,sizeof(num));
        scanf("%s",str);
        int max_len=0;//记录最大长度
        int len=strlen(str);
        num[0]=1;
        for(int i=1; i<len; i++)
        {
            int flag=0;
            for(int j=0; j<i; j++)
            {
                if(str[i]>str[j]&&flag<num[j])
                    flag=num[j];
            }
            num[i]=flag+1;
        }
        for(int i=0; i<len; i++)
            max_len=max(max_len,num[i]);
        printf("%d\n",max_len);
    }
    return 0;
}
  1. 单调递减子序列最大个数
#include <iostream>
#include <stdio.h>
using namespace std;
int h[10000],DP[10000];
int main()
{
    int n;
    while(scanf("%d",&n)&&n!=-1){
        for(int i=0;i<n;i++){
            cin >>h[i];
            DP[i]=1;
        }
        for(int i=1;i<n;i++){
            for(int j=0;j<i;j++){
                if(DP[j]+1>DP[i]&&h[j]<h[i]){
                    DP[i]=DP[j]+1;
                }
            }
        }
        int MAX=0;
        for(int i=0;i<n;i++){
            MAX=max(MAX,DP[i]);
        }
        cout <<MAX<<endl;
    }
    return 0;
}
  1. 非连续最大递增子序列
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;

int a[1005],dp[1005];
const int inf = 0x3f3f3f;

int main()
{
    int n,i,j,ans;
    while(scanf("%d",&n),n)
    {
        memset(dp,0,sizeof(dp));
        for(i = 1;i<=n;i++)
            scanf("%d",&a[i]);
        for(i = 1;i<=n;i++)
        {
            ans = -inf;
            for(j = 0;j<i;j++)
            {
                if(a[i]>a[j])
                    ans = max(ans,dp[j]);
            }
            dp[i] = ans+a[i];
        }
        ans = -inf;
        for(i = 0;i<=n;i++)
        {
            if(dp[i]>ans)
                ans = dp[i];
        }
        printf("%d\n",ans);
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

动态规划:单调减子序列

求序列中的最长单调递增或递减序列长度的动态规划算法网上到处都是,基本思想就是把之前不同长度的最长子序列的最大/小最后一个数给记下来,然后依次的更新后面的数,更新时采用二分查找可以提高效率,缩小复杂度。...

nyist oj 214 单调递增子序列(二) (动态规划经典)

单调递增子序列(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给定一整型数列{a1,a2...,an}(0 如:1 9 10 5 11 2 13的最长...

NYOJ 题目214 单调递增子序列(二) dp+二分

单调递增子序列(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给定一整型数列{a1,a2...,an}(0 如:1 9 10 5...

【数据结构】数组中的最大连续递增子序列

数组中的数是乱序的,求出数组中最大的连续子序列(这里为递增)。 方法一:用一个辅助数组list[length],记录下数组中每个元素对应的最大连续序列长度,默认为1,即从该元素后没有连续的序列。当i元...

HDU1069 Monkey and Banana DP非连续单调递增序列的最大和的变种

Monkey and Banana Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others...
  • qdbszsj
  • qdbszsj
  • 2016年04月17日 23:07
  • 180

NYOJ - 814 - 又见拦截导弹(动态规划--最大单调递增子序列变形)

描述 大家对拦截导弹那个题目应该比较熟悉了,我再叙述一下题意:某国为了防御敌国的导弹袭击,新研制出来一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:它的第一发炮弹能够到达任意的高度,但是以后每一发...

NYOJ 17&214单调递增子序列

NYOJ 17 214 单调递增子序列 题目链接:  17:Click Here

nyoj 214 单调递增子序列(二)【二分+DP】

nyoj 214 单调递增子序列(二)【二分+DP】

NYOJ214最长单调递增子序列(DP)

单调递增子序列(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给定一整型数列{a1,a2...,an}(0 如:1 9 10 5 11 2 1...

求非连续最长单调递增子序列

简述: 设计一个O(n2)以及O(nlogn)时间的算法,找出n个数组成的序列的最长单调递增子序列 例如, 4, 5, 8, 8, 4, 0, 8, 3, 6, 9, 这十个数字 其中最长...
  • anialy
  • anialy
  • 2012年10月02日 16:23
  • 3925
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:nyoj44 nyoj17 HDU1087 DP动规 连续字符串的和最大值 单调递增最长子序列 单调递增子序列最小个数 非连续最大递增子序列
举报原因:
原因补充:

(最多只允许输入30个字)