[DP]HOJ 1760The jackpot

来源:互联网 发布:photoshop for linux 编辑:程序博客网 时间:2024/05/18 07:23

传送门:The jackpot

The jackpot

My Tags  (Edit)
 Source : UVA Time limit : 1 sec Memory limit : 32 M

Submitted : 5803, Accepted : 1688

As Manuel wants to get rich fast and without too much work, he decided to make a career in gambling. Initially, he plans to study the gains and losses of players, so that, he can identify patterns of consecutive wins and elaborate a win-win strategy. But Manuel, as smart as he thinks he is, does not know how to program computers. So he hired you to write programs that will assist him in elaborating his strategy.

Your first task is to write a program that identifies the maximum possible gain out of a sequence of bets. A bet is an amount of money and is either winning (and this is recorded as a positive value), or losing (and this is recorded as a negative value).

Input

The input set consists of a positive number N <= 10000 , that gives the length of the sequence, followed by N integers. Each bet is an integer greater than 0 and less than 1000.

The input is terminated with N = 0.

Output

For each given input set, the output will echo a line with the corresponding solution. If the sequence shows no possibility to win money, then the output is the message "Losing streak."

Sample Input
512 -4 -10 4 93-2 -1 -20
Sample Output
The maximum winning streak is 13.Losing streak.
Thanks To

Problem setter: David Deharbe


解题报告:

此题为简单的求最大子段和。状态转移方程:dp[i+1]=arr[i]+max(dp[i],0);代码如下:

#include<iostream>#include<cstring>#include<cstdio>using namespace std;int dp[10005];int main(){    int n,s,ans;    while(scanf("%d",&n)==1&&n){        ans=-1;        memset(dp,0,sizeof(dp));        for(int i=0;i<n;i++){            scanf("%d",&s);            dp[i+1]=s+max(dp[i],0);            if(dp[i+1]>ans)                ans=dp[i+1];        }        if(ans>0)            printf("The maximum winning streak is %d.\n",ans);        else            printf("Losing streak.\n");    }    return 0;}


0 0
原创粉丝点击