9月20号

来源:互联网 发布:注册了免费已备案域名 编辑:程序博客网 时间:2024/05/03 13:27

今天的任务是学习基本的python,然后两道编程题目,一道叫treat for the cow,这道题是一道dp问题

dp数组的解释:对dp[i][j]:从第i个位置到第j个位置的食物的价值。

初始条件就是dp[i][i]=map[i]*n;

然后用的是递归去计算dp状态转移方程

额,状态转移方程dp[j][temp]= max(dp[j+1][temp]+(n-i)*map[j],dp[j][temp-1]+(n-i)*map[temp]);

然后递归

#include<sttdio.h>
#include<string.h>
#define max(a,b) a>b?a:b
int dp[2005][2005];
int main()
{
    int map[2005];
    int i,j,temp,n;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&map[i]);
    }
    memset(dp,0,sizeof(dp));
    for(i=1;i<=n;i++)
    {
        dp[i][i]=map[i]*n;
    }
    for(i=1;i<n;i++)
    {
        for(j=1;i+j<=n;j++)
        {
            temp=i+j;
            dp[j][temp]= max(dp[j+1][temp]+(n-i)*map[j],dp[j][temp-1]+(n-i)*map[temp]);
        }    
    }
    printf("%d\n",dp[1][n]);    
}


0 0
原创粉丝点击