首页 > 其他 > 详细

洛谷P2858 【[USACO06FEB]奶牛零食Treats for the Cows】

时间:2019-08-15 22:02:48      阅读:107      评论:0      收藏:0      [点我收藏+]

关于这道题,我有个很大的疑问。

我们可以记录头和尾再加一个卖了的零食数目,如果头超过尾就return 0。

如果遇到需要重复使用的数,(也就是不为零的d数组)就直接return d[tuo][wei]。

如果没有,就取卖头一个与最后一个的最大值,并记录下来。

代码也有注释,具体可以自己看。

#include<bits/stdc++.h>
using namespace std;
int n,a[2001],d[2001][2001];
int dfs(int gong,int tuo,int wei)
{
    if(tuo>wei)
    {
        return 0;//返回
    }
    if(d[tuo][wei])
    {
        return d[tuo][wei];//运用记忆化
    }
    return d[tuo][wei]=max(dfs(gong+1,tuo+1,wei)+gong*a[tuo],dfs(gong+1,tuo,wei-1)+gong*a[wei]);//运用记忆化
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    cout<<dfs(1,1,n)<<endl;//输出
    return 0;
}

洛谷P2858 【[USACO06FEB]奶牛零食Treats for the Cows】

原文:https://www.cnblogs.com/2017gdgzoi44/p/11360802.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!