4378. 选取数对 动态规划
Published on 2022-11-17 23:02 in 暂未分类 with 林动

4378. 选取数对 动态规划

    给定一个长度为 n 的整数数列 a1,a2,…,an。

    请你选择 k 个数对 [l1,r1],[l2,r2],…,[lk,rk],要求所选数对满足:

    1≤l1≤r1<l2≤r2<…<lk≤rk≤n。
    对于 1≤i≤k,ri−li+1=m 均成立。
    设 sum=∑i=1k∑j=liriaj,sum 的值应尽可能大。
    请你输出 sum 的最大可能值。

    输入格式
    第一行包含三个整数 n,m,k。

    第二行包含 n 个整数 a1,a2,…,an。

    输出格式
    一个整数,表示 sum 的最大可能值。

    数据范围
    前 6 个测试点满足 1≤m×k≤n≤20。
    所有测试点满足 1≤m×k≤n≤5000,0≤ai≤109。

    输入样例1:
    5 2 1
    1 2 3 4 5
    输出样例1:
    9
    输入样例2:
    7 1 3
    2 10 7 18 5 33 0
    输出样例2:
    61

    #include <bits/stdc++.h>
    using namespace std;
    
    long long n,m,k,t,a[5005],s[5005],f[5005][5005];
    
    
    int main(){
    	cin>>n>>m>>k;
    	for(int i=1;i<=n;++i){
    		cin>>a[i];s[i]=s[i-1]+a[i];
    	}
    	
    	for(int i=1;i<=n;++i)
    	{
    		if(i-m<0)continue;
    		for(int j=1;j<=k;++j)
    		{
    			t=s[i]-s[i-m];
    			f[i][j]=max(f[i-1][j],f[i-m][j-1]+t); 
    		}
    	}
    	cout<<f[n][k];
    	return 0;
    } 
    
    posted @   林动  阅读(31)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · 震惊!C++程序真的从main开始吗?99%的程序员都答错了
    · winform 绘制太阳,地球,月球 运作规律
    · 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
    · 上周热点回顾(3.3-3.9)
    · 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
    点击右上角即可分享
    微信分享提示