CodeForces 467C DP
题目链接:http://codeforces.com/problemset/problem/467/C
题目大意:求k个不覆盖的最大连续区间和,每个区间长度为m。
影响决策的因素有k和区间和,所以dp[i][j]的含义就显而易见了,表示在以第i个数的位置选择了j个子序列的最大值。
所以状态方程为:dp[i][j]=max(dp[i-1][j],dp[i-m][j-1]+sj),sj表示第j个区间的值.所以需要一个sum数组,用来求某个区间和,可以在输入时先做一个预处理,之后sj=sum[i]-sum[i-m];具体代码如下:
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; const int maxn=5005; #define LL long long LL dp[maxn][maxn],sum[maxn]={0}; int a[maxn],n,m,k; int main() { while(scanf("%d%d%d",&n,&m,&k)!=EOF) { for(int i=1;i<=n;i++) { scanf("%d",&a[i]); sum[i]=sum[i-1]+a[i]; } for(int i=1;i<=n;i++) { for(int j=1;j<=k;j++) { if(i>=m) { dp[i][j]=max(dp[i-1][j],dp[i-m][j-1]+sum[i]-sum[i-m]); } else dp[i][j]=dp[i-1][j]; } } printf("%I64d\n",dp[n][k]); } }
做人要厚道,转帖请注明出处!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 上周热点回顾(1.20-1.26)