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

[ABC267D] Index × A(Not Continuous ver.)

解题思路

本题解介绍一种更容易理解的解法(当然,各位大佬也可以用 01 背包做)……

这是一道 DP 题……

设 f(i,j) 表示前 i 个数,已经选了 j 个的最大和。

对于第 i 个数,我们可以选 / 不选。

选:

f(i,j)=\max(f(i-1,j-1)+a_i\times j)

不选:

f(i,j)=\max(f(i-1,j))

注意:是长度为 M 的序列!不是长度小于 M 的序列!

然后直接 DP,取 f(i,m) 的最大值。

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long

int f[2001][2001],n,m,a[2001];
int ans=-1e16;

signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	
	memset(f,-0x3f,sizeof f);
	f[1][1]=a[1];
	f[1][0]=0;
	ans=f[1][m];
	for(int i=2;i<=n;i++)
	{
		f[i][0]=f[i-1][0];
		for(int j=1;j<=min(i,m);j++)
		{
			f[i][j]=max(f[i-1][j],f[i-1][j-1]+a[i]*j);
			ans=max(ans,f[i][m]);
		}
	//	ans=max(ans,f[i][0]);
	}
	cout<<ans;
}


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

相关文章:

  • Linux系统 —— 进程系列 - 进程的概念,PCB与PID和fork
  • Redis与缓存
  • 如何解决 docker 容器中 “-bash: ping: command not found” 错误 ?
  • vue3父子组件通信
  • Asp.net Mvc在VSCore中如何将增删改查的增改添加数据传输到页面(需配合上一篇Mvc的增删改查一起)
  • IDEA社区版创建新模块时,无Spring Initializr选项
  • ES-DSL查询
  • 如何通过自学成长为一名后端开发工程师?
  • 【在Linux世界中追寻伟大的One Piece】HTTP Session
  • 运维工程师.云计算工程师指令集锦
  • Kubernetes架构原则和对象设计(二)
  • 利用ipmi工具设置ip、用户等设置
  • TCP/UDP
  • 如何利用Java爬虫获得商品类目
  • matlab finv()函数解释 F分布 和 逆累积分布函数 卡方分布
  • 彻底理解ThreadLocal的应用场景和底层实现
  • C++多态性
  • 项目页面渲染学习总结
  • 【JavaWeb后端学习笔记】Spring全局异常处理器
  • 【论文笔记】Compact Language Models via Pruning and Knowledge Distillation