题目大意:给定一个由 N 个点组成的环,点有点权,现从中选出 M 个点,对于顺时针方向来说,每一段被选取的第一个点的点权不计入答案贡献,求选出的最大权值是多少。

题解:首先考虑线性的情况,设 \(dp[i][j][0/1]\) 表示前 i 个点选择了 j 个点,且第 i 个点是否被选择的最优解。既然是线性,则第一个点被选取的话,一定不计入答案贡献,因此初始化为:\(dp[1][1][1]=dp[1][0][0]=0\)。再把环对答案的贡献考虑进去,发现只有第 1 个点被选中,且权值计入答案中这种情况被忽略掉了,因此,只需初始化\(dp[1][1][1]=w[1]\),且最后统计答案时,取 dp[n][m][1] 参与答案贡献的计算即可。

代码如下

#include <bits/stdc++.h>
using namespace std;
const int maxn=4000; int n,m,w[maxn],dp[maxn][maxn][2],ans; void read_and_parse(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)scanf("%d",&w[i]);
} void solve(){
memset(dp,0xcf,sizeof(dp));
dp[1][0][0]=dp[1][1][1]=0;
for(int i=2;i<=n;i++)
for(int j=0;j<=min(i,m);j++){
dp[i][j][0]=max(dp[i-1][j][0],dp[i-1][j][1]);
if(j>=1)dp[i][j][1]=max(dp[i-1][j-1][0],dp[i-1][j-1][1]+w[i]);
}
ans=max(dp[n][m][0],dp[n][m][1]);
memset(dp,0xcf,sizeof(dp));
dp[1][1][1]=w[1];
for(int i=2;i<=n;i++)
for(int j=0;j<=min(i,m);j++){
dp[i][j][0]=max(dp[i-1][j][0],dp[i-1][j][1]);
if(j>=1)dp[i][j][1]=max(dp[i-1][j-1][0],dp[i-1][j-1][1]+w[i]);
}
ans=max(ans,dp[n][m][1]);
printf("%d\n",ans);
} int main(){
int T;scanf("%d",&T);
while(T--){
read_and_parse();
solve();
}
return 0;
}

最新文章

  1. CCProxy二级代理上网设置
  2. UISearchController使用
  3. .NET LINQ标准查询运算符
  4. Spring 学习笔记 7. 尚硅谷_佟刚_Spring_Bean 的作用域
  5. LeetCode Perfect Squares
  6. ubuntu14.04 64位系统下编译3.13.11内核源码
  7. redis在.net架构中的应用(1)--使用servicestack连接redis(转)
  8. 2款好用的Web在线编辑器
  9. CSS(04) 定位
  10. Asp.Net MVC向视图View传值的三种常见的方法:
  11. windows安装服务
  12. User Browsing Model简介
  13. plus、max、Pro、Edge
  14. Mac 下 Eclipse 添加 Dynamic Web Project 并配置 Tomcat
  15. windows下使用cmake编译zlib与libpng libjpeg
  16. Divide the Sequence (贪心)
  17. Android开发——adb连接夜神模拟器
  18. Java: 在不同windows主题下,JFrame窗口设置最佳高度的解决方案
  19. CentOS 7下NFS Server作rootfs时的兼容性问题
  20. 【转】Java 有值类型吗?

热门文章

  1. Linux下性能调试工具运维笔记
  2. Jenkins构建自动化任务
  3. PAT甲题题解-1129. Recommendation System (25)-排序
  4. 树莓派 Raspberry Pi 更换国内源
  5. 2016-03-22 OneZero团队 Daily Scrum Meeting
  6. 第三个Sprint冲刺第八天(燃尽图)
  7. TCP程序设计基础
  8. Windows 通过命令行设置固定ip地址
  9. git常用命令及用法小计
  10. notepad编写html