HDU 1087

一个简单而经典的dp;

若数组a:1 3 2 4

则数组b:1 4 3 8

b[i]每一个都要向前找 合法 的最大b[x]值加上当前的a[i];

如b[2]=b[0]+a[2];

#include <iostream>
using namespace std;
int a[1001];
int b[1001];
int max_b(int i){
    int max1=0;
    for(int j=0;j<i;j++){
        if(b[j]>max1&&a[i]>a[j]){
            max1=b[j];
        }
    }
    return max1;
}
int main(){
    int n,i;
    while(cin>>n){
        if(0==n)break;
        for( i=0;i<n;i++){
            cin>>a[i];
        }
        b[0]=a[0];
        int max2=0;
        for( int k = 1; k < n; k++)
            {
                b[k]=max_b(k)+a[k];
            }
        for( i = 0; i < n; i++)
            if(b[i]>max2)max2=b[i];
        cout<<max2<<endl;
    }
    return 0;
}

HDU 1087

时间: 2024-10-09 23:12:27

HDU 1087的相关文章

[2016-03-27][HDU][1087][Super Jumping! Jumping! Jumping!]

时间:2016-03-27 15:51:40 星期日 题目编号:[2016-03-27][HDU][1087][Super Jumping! Jumping! Jumping!] 分析:dp[i]表示跳到第i个位置,能拿到的最多分,则dp[i] = max(dp[i] , dp[j] + v[i]) 能从j跳到i 遇到的问题:排序之和,a[1].v <= a[2].v 而不是 a[1].v < a[2].v 所以还是需要判断一下价值 #include <algorithm> #in

HDU 1087 &amp;&amp; POJ 2533(DP,最长上升子序列).

~~~~ 两道题的意思差不多,HDU上是求最长上升子序列的和,而POJ上就的是其长度. 貌似还有用二分写的nlogn的算法,不过这俩题n^2就可以过嘛.. ~~~~ 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1087 http://poj.org/problem?id=2533 ~~~~ HDU1087: #include<cstdio> #include<cstring> #include<algorithm> #

HDU 1069&amp;&amp;HDU 1087 (DP 最长序列之和)

H - Super Jumping! Jumping! Jumping! Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 1087 Appoint description:  System Crawler  (2015-11-18) Description Nowadays, a kind of chess game called “Su

hdu 1087 简单dp

思路和2391一样的.. <span style="font-size:24px;">#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; const int inf=(0x7f7f7f7f); int main() { int a; int s[10005]; int w[10005];

hdu 1087 最大上升子序列和

题意:求最大上升子序列和 #include<iostream> using namespace std; int main() { int n,a[1001],b[1001],max; while(cin>>n&&n!=0) { for(int i=1;i<=n;i++) cin>>a[i]; b[1]=a[1]; for(i=2;i<=n;i++) { max=0; for(int j=1;j<i;j++) if(a[i]>a[

[ACM] hdu 1087 Super Jumping! Jumping! Jumping! (动态规划)

Super Jumping! Jumping! Jumping! Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 6   Accepted Submission(s) : 5 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description Nowada

(最大上升子序列) Super Jumping! Jumping! Jumping! -- hdu -- 1087

http://acm.hdu.edu.cn/showproblem.php?pid=1087 Super Jumping! Jumping! Jumping! Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 1087 Description Nowadays, a kind of chess game called “Super Jump

E - Super Jumping! Jumping! Jumping! HDU 1087 (基础动态规划)

E - Super Jumping! Jumping! Jumping! Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Practice HDU 1087 Description Nowadays, a kind of chess game called "Super Jumping! Jumping! Jumping!" is very popular in

HDU 1087 Super Jumping! Jumping! Jumping! 简单DP

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087 题目大意:N个数字组成的一条路,每个数字是一个节点顺序连接,起点在第一个数之前,终点在第N个数之后.现让你选择一条路从起点跳到终点,只能往前且跳到比当前点大的那个点,可以认为终点是最大的,可以从起点直接跳到终点但是路的值就是0了,每条路的值为所经过的数字节点的值的和,问你值最大为多少. 解题思路:决策:在当前点i往i~N哪个点跳,反过来当前点i+1可以从1~i哪个点跳过来,那么a[i+1] >