当前位置: 首页 > article >正文

P2858 [USACO06FEB] Treats for the Cows G/S 题解

P2858

题意

给一个数组。每天把最左或者最右的东西卖掉,第 i i i个东西,第 d a y day day天卖出的价格是 a [ i ] ∗ d a y a[i]*day a[i]day

记忆化搜索


void dfs(int l,int r,int day,ll sum)
{
	if(v[l][r]>=sum)return;
	v[l][r]=sum;
	if(l>r)//这就是dp答案
	{
		ans=max(ans,sum);
		return;
	}
	if(l<=n)dfs(l+1,r,day+1,sum+a[l]*day);
	if(r>=1)dfs(l,r-1,day+1,sum+a[r]*day);
}

TLE 63

正解dp

通过写dfs,我们可以发现对于状态dp[i][j]他的下一个状态就是dp[i+1][j]dp[i][j-1]。那么我们可以从当前状态出发计算下一个状态的值。我们可以用 d p [ i ] [ j ] dp[i][j] dp[i][j]表示从 [ i , j ] [i,j] [i,j]这个状态为起点的最大值。根据搜索的代码,答案就是 d p [ i ] [ i − 1 ] dp[i][i-1] dp[i][i1]。记得long long

代码

#include<bits/stdc++.h>
#include<cstring>
#include<queue>
#include<set>
#include<stack>
#include<vector>
#include<map>
#define ll long long
#define lhs printf("\n");
using namespace std;
const int N=1e5+10;
const int M=2024;
const int inf=0x3f3f3f3f;
ll a[N],n,dp[M][M],ans; //记得ll
int v[M][M];
void dfs(int l,int r,int day,ll sum)//记忆化
{
	if(v[l][r]>=sum)return;
	v[l][r]=sum;
	if(l>r)
	{
		ans=max(ans,sum);
		return;
	}
	if(l<=n)dfs(l+1,r,day+1,sum+a[l]*day);
	if(r>=1)dfs(l,r-1,day+1,sum+a[r]*day);
}
int main()
{
	scanf("%lld",&n); 
	for(int i=1;i<=n;i++)scanf("%lld",&a[i]);	
	for(int i=1;i<=n;i++)
	{
		for(int j=n;j>=i;j--)
		{
			int day=i-1+n-j+1;
			dp[i+1][j]=max(dp[i+1][j],dp[i][j]+a[i]*day);
			dp[i][j-1]=max(dp[i][j-1],dp[i][j]+a[j]*day);	
		}
	}
	for(int i=1;i<=n;i++)
	{
		ans=max(ans,dp[i][i-1]);
	}
	printf("%lld",ans);
	return 0;
}

AC记录


http://www.kler.cn/a/299798.html

相关文章:

  • [权限提升] 常见提权的环境介绍
  • 【Valgrind】安装报错: 报错有未满足的依赖关系: libc6,libc6-dbg
  • 将ollama迁移到其他盘(eg:F盘)
  • Visual Studio Code修改terminal字体
  • 四.3 Redis 五大数据类型/结构的详细说明/详细使用( hash 哈希表数据类型详解和使用)
  • 【C语言练习题】找出不是两个数组共有的元素
  • # 键盘字母上有下标数字,输入时怎么一键去掉,关闭键盘上的下标数字。‌
  • String 的 replace replaceAll 方法 —— 将字符串中所有中文逗号替换为英文逗号
  • C/C++——野指针处理
  • 二叉树(中)
  • 自定义事件分发
  • [数据结构] 哈希结构的哈希冲突问题——解决哈希冲突的两种方法
  • 快速搭建最简单的前端项目vue+View UI Plus
  • 某郊到家:互联网时代下的按摩服务革新
  • Avaloia 实现国产麒麟系统中文显示界面
  • Node.js 多版本安装与切换指南
  • 又一个iPhone时代开始
  • 【系统架构设计师】状态模式
  • etl文件性能分析
  • Android 蓝牙三方和动态权限三方
  • Netty中用到了哪些设计模式
  • 机器学习,深度学习,AGI,AI的概念和区别
  • git使用基础教程
  • 【系统架构设计师】享元模式
  • 机器学习中的聚类艺术:探索数据的隐秘之美
  • 【视频讲解】Python贝叶斯卷积神经网络分类胸部X光图像数据集实例