AHU 501 送钱活动

http://icpc.ahu.edu.cn/OJ/Problem.aspx?id=501

和hdu1024一模一样,随便改改就过了。。。

ps:安徽大学oj这个经验值系统真好玩、、

View Code
#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#define INF -100000000

int max(int a,int b){

    return a>b?a:b;

}

int a[1100000],p[1100000],q[1100000],now[1100000],pro[1100000];//now记录当前最大值,pro记录前一个的最大值 

int main()

{

    int n,k,i,j;

    int maxsum;

    while(~scanf("%d%d",&n,&k),(n||k))

    {

        for(i=1;i<=n;i++)

            scanf("%d",p+i);

        for(i=1;i<=n;i++)

            scanf("%d",q+i);

        for(i=1;i<=n;i++)

            a[i]=p[i]-q[i];

        memset(now,0,sizeof(now));

        memset(pro,0,sizeof(pro));

        for(i=1;i<=k;i++)

        {

            maxsum=INF;//求m段,所以每段计算前要把最大值初始化 

            for(j=i;j<=n;j++)

            {

                now[j]=max(now[j-1]+a[j],pro[j-1]+a[j]);//状态转移 

                pro[j-1]=maxsum;//记录前一个最大值 

                if(maxsum<now[j])maxsum=now[j];//更新最大值 

            }

        }

        if(maxsum>0) 

            printf("%d\n",maxsum);

        else

            printf("0\n");

    }

    return 0;

} 

 

你可能感兴趣的:(活动)