AcWing 周赛 C题 4418. 选元素
闫式dp分析法 状态表示f[i][j]:表示在前i个数中选,且包含第i个数,一共j个数的所有集合,属性:max 状态计算: f[i][j]:当前第j个点已经在第i个位置,那么第j-1个点与第j个点之间的点数个数应该不大于k,那么假设倒数第二个点 即第j-1个点的下标是t 则 i-k<=t<i 那么f[i][j]=max(f[i][j],f[t][j-1]+a[i]) t=>(i-k<=t<i) 最后的结果是在n-k+1 ~ n之间选择一个最后一个点取最大值即可
#include<bits/stdc++.h> using namespace std; typedef long long LL; const int N = 210; LL a[N],dp[N][N]; int main(){ int n,k,x; cin>>n>>k>>x; for(int i=1;i<=n;i++) cin>>a[i]; memset(dp,-0x3f,sizeof dp); dp[0][0]=0; for(int i=1;i<=n;i++) for(int j=1;j<=x;j++) for(int r=max(0,i-k);r<i;r++) dp[i][j]=max(dp[i][j],dp[r][j-1]+a[i]); LL ans=-1; for(int i=n-k+1;i<=n;i++) ans=max(ans,dp[i][x]); cout<<ans; return 0; }
本文作者:xhy666
本文链接:https://www.cnblogs.com/xhy666/p/16246323.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】