P2858 [USACO06FEB] Treats for the Cows G/S

题目描述

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

  • 零食按照 1,...,N 编号,它们被排成一列放在一个很长的盒子里。盒子的两端都有开口,约翰每天可以从盒子的任一端取出最外面的一个。
  • 与美酒与好吃的奶酪相似,这些零食储存得越久就越好吃。当然,这样约翰就可以把它们卖出更高的价钱。
  • 每份零食的初始价值不一定相同。约翰进货时,第 i 份零食的初始价值为 Vi(1≤V≤1000)。
  • 第 i 份零食如果在被买进后的第 a 天出售,则它的售价是 Vi×a。

Vi​ 表示的是从盒子顶端往下的第 i 份零食的初始价值。约翰告诉了你所有零食的初始价值,并希望你能帮他计算一下,在这些零食全被卖出后,他最多能得到多少钱。

输入格式

第一行一个正整数 N。

接下来 2∼N+1 行,第 i+1 行为一个正整数 Vi​。

输出格式

一行一个整数表示答案。

输入输出样例

输入 #1复制

复制代码
5
1
3
1
5
2

输出 #1复制

复制代码
43

说明/提示

样例的最优解是:按 1→5→2→3→4 的顺序卖零食,得到的钱数是 1×1+2×2+3×3+4×1+5×5=43。

代码DFS

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int v[2005],n;
int ans;
void DFS(int day,int shang,int xia,int jia){
	if(shang==xia){
		ans=max(ans,jia+v[shang]*day);
		return;
	}
	DFS(day+1,shang+1,xia,jia+day*v[shang]);
	DFS(day+1,shang,xia-1,jia+day*v[xia]);
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>v[i];
	}
	DFS(1,1,n,0);
	cout<<ans; 
	return 0;
}

代码DP

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N=2005;
int n,dp[N][N],v[N];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>v[i];
	}
	for(int i=1;i<=n;i++){
		for(int j=n;j>=i;j--){
			int a=n-(j-i+1);
			dp[i][j]=max(dp[i-1][j]+v[i-1]*a,dp[i][j+1]+v[j+1]*a);
		}
	}
	int maxn=0;
	for(int i=1;i<=n;i++){
		maxn=max(maxn,dp[i][i]+v[i]*n);
	} 
	cout<<maxn;
	return 0;
}
相关推荐
Navigator_Z22 分钟前
LeetCode //C - 1252. Cells with Odd Values in a Matrix
c语言·算法·leetcode
语戚2 小时前
力扣 1621. 大小为K的不重叠线段的数目:动态规划(Java 实现)
java·算法·leetcode·动态规划·力扣·dp
青山木2 小时前
Hot 100 --- 最长有效括号
java·数据结构·算法·leetcode·动态规划
这料鬼有毒4 小时前
二刷hot100-1143.最长公共子序列
算法·leetcode·动态规划
政企项目老覃4 小时前
边缘 AI 推理部署:安防零售场景下的模型裁剪与端侧落地实践
人工智能·程序人生·算法·性能优化·vllm
I_belong_to_jesus4 小时前
std::unique_ptr成员函数用法
c++
爱吃苹果的日记本5 小时前
数据结构第五课
数据结构·学习
Tairitsu_H5 小时前
[C++] 拷贝构造还是赋值重载?类默认成员函数细节详解
开发语言·c++·类和对象
Logic1015 小时前
C语言/数据结构贪心算法题解:买卖股票的最佳时机——一次交易最大利润(O(n)时间O(1)空间)
c语言·数据结构·贪心算法·数组·时间复杂度·算法题·股票交易
Logic1016 小时前
C语言/数据结构位运算题解:异或XOR找出货币交易中的“独特面值“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质