HHUOJ 1852 窃贼

HHUOJ 1852 窃贼

题目描述

某人在ACM俱乐部里偷重要资料。
对他来说,每份资料都有一个价值。由于有些资料对他来说相当于废纸,如果他还得千辛万苦把这些东西搬走的话,他就会认为这些资料的价值是个负数。
现在时间紧逼,他只能拿走其中连续的一叠(至少一份)!他能拿走价值多大的资料呢?

输入

输入有多组数据。
每组数据两行。
第一行1个正整数(不大于5000),代表资料的总数。
第二行n个整数(绝对值不大于10000),代表每份资料的价值。

输出

对应每组数据,输出能拿走的资料的最大总价值。

样例输入

5
-1 4 -1 5 -3
3
-1 -5 -6
2
0 -1

样例输出

8
-1
0

套一个最大连续子序列模板即可:

#include 
#define maxn 10005
using namespace std;
typedef long long ll;

int main()
{
   int n;
   int a[maxn],dp[maxn];
   while(~scanf("%d",&n)){
   for(int i=0;i<n;i++){
    scanf("%d",&a[i]);
   }
   int ans=-1e8;
   memset(dp,0,sizeof(dp));
   for(int i=0;i<n;i++){
       dp[i]=max(a[i],dp[i-1]+a[i]);
       ans=max(ans,dp[i]);
   }
   printf("%d\n",ans);
   }
  return 0;
}

你可能感兴趣的:(HHUOJ,动态规划)