Problem J: 神医胡青牛

Problem J: 神医胡青牛

题目:

胡青牛是“倚天屠龙记”中的神医,每天都有N多(N<=2000)的人来求他治病,这些人排成一队,从1开始编号直到N
,每个人手里都拿着一个牌子,其上的值用Ai(1<=i<=N,1<=ai<=1000)代表,表示自己愿意付给胡大牛多少钱做为酬
金。胡神医每次从队首或队尾取一个人出来,治完这个人之后,他将获得M*Ai的Money其中M代表这个病人是第几个
被救治的。求胡青牛所能获取的最大money

输入

5
1
3
1
5
2

输出

43
Hint
胡大牛将按1, 5, 2, 3, 4的顺序来治人,赚得1x1 + 2x2 + 3x3 + 4x1 + 5x5 = 43.

思路
如果我们要取最大值,那就让更大的值后取;本题可用dfs,不断找 取当前队列头与取当前队列尾的最大值返回,再用num记下这是第几个人,输出即可;

代码

#include<bits/stdc++.h>
using namespace std;
int n;
int ans;
int a[2005],b[2005][2005];
int dfs(int x,int y,int z){
    if(x==y)return a[x]*z;
    if(b[x][y]!=0)return b[x][y];
    return b[x][y]=max(dfs(x+1,y,z+1)+a[x]*z,dfs(x,y-1,z+1)+a[y]*z);
}
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    ans=dfs(1,n,1);
    printf("%d",ans);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值