【SPOJ283】Naptime
题目大意:给定一个由 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;
}
【SPOJ283】Naptime的更多相关文章
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- 【原】谈谈对Objective-C中代理模式的误解
[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...
- 【原】FMDB源码阅读(三)
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【调侃】IOC前世今生
前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...
- Python高手之路【三】python基础之函数
基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...
- Python高手之路【一】初识python
Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...
- 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...
- 【原】FMDB源码阅读(二)
[原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...
随机推荐
- EF5.0区别于EF4.0的crud区别
public T AddEntity(T entity) { //EF4.0的写法 添加实体 //db.CreateObjectSet<T>().AddObject(entity); // ...
- 如何设置本机电脑的固定IP地址?
最近使用Loadrunner需要用到IP欺骗,但是我打开设置IP欺骗却提示我:IP向导不支持启用DHCP的网卡.您的卡启用了DHCP或者配置了无效设置.请与系统管理员联系. 我就方了,于是百度了一下, ...
- SpringBoot笔记--FastJson
FastJson配置 ObjectId class ObjectIdSerializer : ObjectSerializer { override fun write(serializer: JSO ...
- 针对负载均衡集群中的session解决方案的总结
在日常运维工作中,当给Web站点使用负载均衡之后,必须面临的一个重要问题就是Session的处理办法,无论是PHP.Python.Ruby还是Java语言环境,只要使用服务器保存Session,在做负 ...
- Python-文件操作—_19
1,文件操作 模特主妇护士老师.txt 1,文件路径:d:\模特主妇护士老师.txt 2,编码方式:utf-8 gbk .... 3,操作方式:只读,只写,追加,读写,写读..... 以什么编码方式储 ...
- Java的首次学习和了解
先来说说自己对于Java的了解.Java是一种面向对象的语言,而c++则是面向过程的.Java在网页的开发设计制作过程中必不可少,另外我们还可以用它来做手机的移动开发,还有一些基于服务器的架构设计.J ...
- pom.xml mevan 的 配置文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- String系列-----AbstractStringBuilder
1. AbstractStringBuilder是StringBuffer和StringBuilder的父类 package com.amazing.jdk.string_2017_12_31; im ...
- Docker attach
Description Attach local standard input, output, and error streams to a running container Usage dock ...
- Windows 安装 docker 以及1709的简单使用
PS C:\> Install-Module -Name DockerMsftProvider -Repository PSGallery -Force PS C:\> Install-P ...