poj3661,dp

来源:互联网 发布:mastercam线割编程 编辑:程序博客网 时间:2024/05/17 22:46

dp

三维状态记录第几分钟时疲劳度的值以及这一分钟的状态(休息还是run).

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<iostream>#include<queue>#define INF 2000000000int dp[10005][505][2],d[10005];int max(int a,int b){    return a>b?a:b;}int main(){    int n,m,i,j,k,l;    while(scanf("%d%d",&n,&m)!=EOF)    {        for(i=1;i<=n;i++)            scanf("%d",&d[i]);        memset(dp,-1,sizeof(dp));        dp[0][0][0]=0;        dp[0][0][1]=0;        for(i=1;i<=n;i++)            for(j=0;j<=m;j++)        {            if(j!=m)            {                dp[i][j][0]=max(dp[i-1][j+1][0],dp[i-1][j+1][1]);                if(j==0)                    dp[i][j][0]=max(dp[i][j][0],dp[i-1][j][0]);            }            if(j!=0)            {                if(dp[i-1][j-1][1]!=-1)                dp[i][j][1]=dp[i-1][j-1][1]+d[i];                if(j-1==0&&dp[i-1][j-1][0]!=-1)                    dp[i][j][1]=max(dp[i][j][1],dp[i-1][j-1][0]+d[i]);            }        }        printf("%d\n",dp[n][0][0]);    }    return 0;}


0 0
原创粉丝点击