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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

动态规划求最长连续递增子串

最长递增子序列问题是一个很基本、较常见的小问题,但这个问题的求解方法却并不那么显而易见,需要较深入的思考和较好的算法素养才能得出良好的算法。由于这个问题能运用学过的基本的算法分析和设计的方法与思想,能...
  • guoxinian
  • guoxinian
  • 2016年10月20日 17:20
  • 2288

C++ 最长递增子序列问题

最长递增子序列问题:在一列数中寻找一些数,这些数满足:任意两个数a[i]和a[j],若i动态规划求一序列的最长子序列的长度,那么将问题变为在序列中求以a[k]为终点的最长上升子序列的长度aLen[k]...
  • BIG_C_GOD
  • BIG_C_GOD
  • 2016年11月05日 16:05
  • 1478

编程之美2.16求数组中最长递增子序列Java版

解法三还没写 /* * To change this license header, choose License Headers in Project Properties. * To cha...
  • TT285955925
  • TT285955925
  • 2016年07月01日 21:21
  • 1456

NYOJ 题目17 单调递增最长子序列 (DP) hdu 题目2845 Bean

吃土豆 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述Bean-eating is an interesting game, everyone owns an ...
  • u011282069
  • u011282069
  • 2013年08月13日 23:01
  • 637

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
  • 212

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

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

NYOJ 17&214单调递增子序列

NYOJ 17 214 单调递增子序列 题目链接:  17:Click Here
  • u014767460
  • u014767460
  • 2014年04月17日 15:51
  • 465

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

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

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

nyoj 214 单调递增子序列(二)【二分+DP】
  • xingdragon
  • xingdragon
  • 2016年08月06日 15:02
  • 149

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

单调递增子序列(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给定一整型数列{a1,a2...,an}(0 如:1 9 10 5 11 2 1...
  • YCH1035235541
  • YCH1035235541
  • 2013年06月11日 20:56
  • 580
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:nyoj44 nyoj17 HDU1087 DP动规 连续字符串的和最大值 单调递增最长子序列 单调递增子序列最小个数 非连续最大递增子序列
举报原因:
原因补充:

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