动态规划专项训练(2)

来源:互联网 发布:jquery get json 编辑:程序博客网 时间:2024/05/16 17:14

持续更新中…


题目:A - Max Sum

题解:
arr[maxn]是存放数据;
dp[maxn]是动态存放arr[maxn]从第i个值及之后相加的和;
(输出:最大的和,开始的地址,结束的地址)

#include<cstdio>#include<cstring>#define maxn 100010const int INF = -1e4;int arr[maxn];int dp[maxn];int cas = 1;int main(){    int t;    scanf("%d",&t);    while(t--)    {        int maxnum = INF,start = 0,endnum = 0;        int first = 0,last = 0;        int n;        scanf("%d",&n);        memset(arr,0,sizeof(arr));        memset(dp,0,sizeof(dp));        for(int i=0;i<n;i++)        {            scanf("%d",&arr[i]);        }        dp[0] = arr[0];        for(int i=0;i<n;i++)        {            if(dp[i-1] + arr[i] >= arr[i])            {                dp[i] = dp[i-1] + arr[i];                endnum = i;            }            else            {                dp[i] = arr[i];                start = i;                endnum = i;            }            if(dp[i] > maxnum)            {                maxnum = dp[i];                first = start;                last = endnum;            }        }        printf("Case %d:\n",cas++);        printf("%d %d %d\n",maxnum,first+1,last+1);        if(t != 0)           //注意题目的描述        {            printf("\n");        }    }    return 0;}
原创粉丝点击