hdoj1003(DP)

来源:互联网 发布:上古世纪美女捏脸数据 编辑:程序博客网 时间:2024/05/29 12:32

动态规划。

要求出和最大的字段,可列出两种状态,得到相应的转移方程。

DP问题要抓住两个核心。1.dp[i]代表什么含义2.列出动态转移方程式

#include <stdio.h>#include <string.h>#include <algorithm>#include <iostream>#include <math.h>#define For(i,n,m) for(i=n;i<m;i++)using namespace std;int b[100005];int c[100005];int s1,s2,z1,z2;int main(){    int n;    scanf("%d",&n);    int i=1;    while(i<=n)    {        printf("Case %d:\n",i);        int m;        scanf("%d",&m);        for(int j=0;j<m;j++)            scanf("%d",&b[j]);        int Max=-999;        s1=0;        z2=0;        c[0]=b[0];        for(int j=0;j<m;j++)        {            if(c[j-1]>=0)            {                c[j]=c[j-1]+b[j];                z1=j;            }            else            {                                c[j]=b[j];                z1=j;                s1=j;            }                        if(Max<c[j])            {                Max=c[j];                s2=s1;                z2=z1;            }        }        printf("%d %d %d\n",Max,s2+1,z2+1);        if(i!=n)            printf("\n");        i++;    }    return 0;}



原创粉丝点击