我是靠谱客的博主 迷路灰狼,最近开发中收集的这篇文章主要介绍1901. 牛的零食,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目描述

FJ经常给产奶量高的奶牛发特殊津贴,于是很快奶牛们拥有了大笔不知该怎么花的钱。为此,FJ购置了N(1<=N<=2000)份美味的零食来卖给奶牛们。每天FJ售出一份零食。当然FJ希望这些零食全部售出后能得到最大的收益。

这些零食有以下这些有趣的特性:

  • 零食按照1…N编号,它们被排成一列放在一个很长的盒子里。盒子的两端都有开口,FJ每天可以从盒子的任一端取出最外面的一个。

  • 与美酒和好吃的奶酪相似,这些零食储存得越久就越好吃。当然,这样FJ就可以把它们卖出更高的价钱。

  • 每份零食的初始价值不一定相同。FJ进货时,第i份零食的初始价值为v(i) (1<=v(i)<=1000)。

  • 第i份零食如果在被买进后的第a天出售,则它的售价是v(i)*a。

v(i)对应的是从盒子顶端往下的第i份零食的初始价值。FJ告诉了你所有零食的初始价值,并希望你能帮他计算一下,在这些零食全被卖出后,他最多能得到多少钱。
第一份零食在买进后的第1天售出,也就是说此时a=1。以后每过一天,a的值就增加1。

输入

第1行: 一个整数N,表示零食的总数

第2…N+1行: 第i+1行给出了从盒子顶端往下的第i份零食的初始价值v(i)

输出

第1行: 输出一个整数,即FJ在卖完所有零食后的最大可能收益

Code

普通搜索 54分

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

int n,ans,v[2020];

void dfs(int ste,int l,int r,int sum){
    if(l==r){
        ans=max(ans,sum+v[l]*ste);
        return;
    }
    dfs(ste+1,l+1,r,sum+ste*v[l]);
    dfs(ste+1,l,r-1,sum+ste*v[r]);
}

int main(){
    scanf("%d",&n);ans=0;
    for(int i=1;i<=n;i++)scanf("%d",&v[i]);
    dfs(1,1,n,0);
    cout<<ans<<endl;
    return 0;
}

记忆化搜索 AC

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

int n,ans,v[2020],f[2020][2020];

int dfs(int ste,int l,int r){
    if(r<l)return 0;
    if(f[l][r])return f[l][r];
    f[l][r]=max(dfs(ste+1,l+1,r)+ste*v[l],dfs(ste+1,l,r-1)+ste*v[r]);
    return f[l][r];
}

int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)scanf("%d",&v[i]);
    dfs(1,1,n);
    printf("%d",f[1][n]);
    return 0;
}

区间dp AC

第一层循环枚举区间长度,第二层循环枚举左端点。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,f[2017][2017],v[2017];
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)scanf("%d",&v[i]);
    for(int i=1;i<=n;i++)f[i][i]=v[i]*n;//一开始初始化忘记乘以n 
    for(int i=2;i<=n;i++){
        for(int l=1;l<=n;l++){
            int r=l+i-1;
            if(r>n)break;
            f[l][r]=max(f[l][r-1]+v[r]*(n-i+1),f[l+1][r]+v[l]*(n-i+1));
        }
    }
    printf("%dn",f[1][n]);
    return 0;
}

最后

以上就是迷路灰狼为你收集整理的1901. 牛的零食的全部内容,希望文章能够帮你解决1901. 牛的零食所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部