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

题目描述

有一个长度为 NN 整数数列 A=(A_1,A_2,...,A_N)A=(A1​,A2​,...,AN​) 。

现在假设有一个长度为 MM 的序列 BB ,并且 BB 是 AA 的子序列。请找到 \sum_{i=1}^M i\times B_i∑i=1M​i×Bi​ 的最大值。

输入格式

输入按照下面的标准格式给出:

N\ M \newline A_1 \ A_2 \ \dots\ A_NN MA1​ A2​ … AN​

输出格式

一个整数,表示\sum_{i=1}^M i\times B_i∑i=1M​i×Bi​ 的最大值。

样例 #1

样例输入 #1

4 2
5 4 -1 8

Copy

样例输出 #1

21

Copy

样例 #2

样例输入 #2

10 4
-3 1 -4 1 -5 9 -2 6 -5 3

Copy

样例输出 #2

54

Copy

说明 / 提示

注意事项

若序列 SS 是长度为 LL 的数列 TT 的子序列,则 SS 是数列 TT 删除任意 i\ (i\in [0,L])i (i∈[0,L]) 个元素得到的。

比如说, (10,30)(10,30) 是 (10,20,30)(10,20,30) 的字串,但是 (20,10)(20,10) 不是。

数据范围
  • 1\le M\le N\le 20001≤M≤N≤2000
  • -2\times 10^5\le A_i\le 2\times 10^5−2×105≤Ai​≤2×105
  • 所有输入数据均为整数
样例解释

对于样例一,当 B=(A_1,A_4)B=(A1​,A4​) 时,\sum_{i=1}^M i\times B_i=1\times 5+2\times 8=21∑i=1M​i×Bi​=1×5+2×8=21 。因为不可能达到 22 或者更大的值,所以答案是 21 。

思路 

通过观察我们可以发现,对于每一个值,只有加和不加两种选择,那么我们就可以利用一个三维数组存储当前数值(z[从一到i][第j个值][有无])。

代码见下:

#include<bits/stdc++.h>
using namespace std;
long long int d=1e7;
long long int f[3001][3001][3];
long long int z[10000000],sd,g[10000000],o[10000000],uss[1001][1001];
long long int n,m,mo=1e9+7;
long long int s=1;
long long int sf=1,sg=s,sh,tt=9e8,l;
int main(){
    cin>>n>>m;
    memset(f,-10,sizeof(f));
    for(int i=1;i<=n;i++){
		cin>>z[i];
		f[i][0][0]=0;
		f[i][0][1]=0;
	}
	f[0][0][0]=0;
	f[0][0][1]=0;
    for(int i=1;i<=n;i++){
		for(int j=1;j<=m&&j<=i;j++){
			f[i][j][1]=max(f[i-1][j-1][1],f[i-1][j-1][0])+z[i]*j;
			f[i][j][0]=max(f[i-1][j][1],f[i-1][j][0]);
		}
	}	
	cout<<max(f[n][m][1],f[n][m][0]);
}

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
国赛题目一般来源于科学与工程技术、人文与社会科学等领域经过适当简化加工的实际问题。参赛者不需要预先掌握深入的专门知识,只需要学过高等学校的数学基础课程。对于解题思路,可以根据题目要求进行以下步骤来完成建模和求解: 1. 理解题目:仔细阅读题目,理解问题的背景和要求。注意提取关键信息,明确问题的目标和约束条件。 2. 建立数学模型:根据题目的描述和要求,将实际问题转化为数学模型。可以使用已知的数学理论、公式和方法,结合问题的特点进行建模。根据问题类型,可以将问题归类为分类问题、优化问题、预测问题或评价问题。 3. 求解模型:根据建立的数学模型,使用适当的数学工具和方法进行求解。可能需要进行数值计算、优化算法或统计分析等操作,以得到问题的解答。 4. 分析和检验结果:对求解结果进行分析和检验,验证其合理性和正确性。可以通过对比实际数据或进行敏感性分析来评估模型的准确性和可靠性。 5. 模型的改进:根据对结果的分析和检验,对模型进行改进。可以尝试不同的假设或调整参数,以提高模型的性能和适应性。 综上所述,解题思路主要包括理解题目、建立数学模型、求解模型、分析和检验结果以及模型的改进。具体的解题思路会根据不同的题目和问题类型有所差异,建议参赛者根据具体题目要求和自身的数学知识经验,灵活运用数学方法和工具,进行问题的建模和求解。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值