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;
}