P2029 跳舞
题目描述
小明今天得到一个跳舞毯游戏程序Dance。游戏每次连续出N个移动的“箭头”,箭头依次标号为1到N,并且的相应的分数S[1..N]。如果你能“踏中”第i号箭头,你将获得相应的分数S[i];否则将被扣除相应的分数。
另外,游戏还有一个累计奖励机制:如果踏准次数累计达到T,并且是在踏中第i个箭头达到的,则将得到B[i]的奖励分数,累计也将清零,重新开始。
例如:N=6,T=3,相应的S和B分别为{1,2,3,4,5,6}、{0,0,4,7,9,10},如果小明踏中所有箭头,则得分为:(1+2+3+4)+(4+5+6+10)=35
小明是个Dance高手,可以踏中他想踏中的任意一个箭头。但他发现,根据给定的N,T,S,B,踏中所有的箭头不一定能得最高分,小明很想知道最高能得多少分,你能帮助小明计算一下最多可得多少分吗?
输入输出格式
输入格式:
第一行两个整数N和T。
第二行N个整数,为S的相应分数。
第三行也有N个整数,为B的相应分数。
输出格式:
一个整数,可得到的最高分数。
输入输出样例
6 3
1 2 3 4 5 6
1 1 1 20 1 1
39
说明
【样例解释】
跳过第一个,扣1分,连踩3个,得9分,并获得附加分20分,之后再连踩2个,共39分。
【数据范围】
对于20%的数据0≤N,T≤100;
对于100%的数据0≤N,T≤5000;
S和B各有N个数,所有分数为[0,10000]之间的整数。
Solution:
本题不难。。。
第一眼一味可以随便走,那扣分的条件不就多余了吗?后面发现是从$1$开始依次到$n$,那么就是个线性的,直接二维枚举就好了。
设$f[i][j]$表示第$j$次在第$i$个位置时的最大值,初始化时$f[i][0]=f[i-1][0]-a[i]$(表示在不动到了第$i$个位置时的值从上一个位置转移过来,且要扣分),然后状态转移方程就显而易见了:
$f[i][j]=max(f[i-1][j-1]+a[i],f[i-1][j]-a[i])$,当$j\;mod\;m==0$时,转移时就是$f[i][j]=max(f[i-1][j]+a[i],f[i-1][j-1]+a[i]+b[i])$。
最后答案就是所有状态中的最大值拉。
代码:
#include<bits/stdc++.h>
#define il inline
#define For(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)>(b)?(b):(a))
using namespace std;
const int N=;
int n,m,a[N],b[N],f[N][N],ans=-; il int gi(){
int a=;char x=getchar();
while(x<''||x>'')x=getchar();
while(x>=''&&x<='')a=(a<<)+(a<<)+x-,x=getchar();
return a;
} int main(){
n=gi(),m=gi();
For(i,,n)a[i]=gi(),f[i][]=f[i-][]-a[i];
For(i,,n)b[i]=gi();
For(i,,n){
For(j,,i){
f[i][j]=Max(f[i-][j-]+a[i],f[i-][j]-a[i]);
if(j%m==)f[i][j]=Max(f[i-][j]-a[i],f[i-][j-]+b[i]+a[i]);
ans=Max(ans,f[i][j]);
}
}
cout<<ans;
return ;
}
P2029 跳舞的更多相关文章
- 洛谷P2029 跳舞
P2029 跳舞 题目描述 小明今天得到一个跳舞毯游戏程序Dance.游戏每次连续出N个移动的“箭头”,箭头依次标号为1到N,并且的相应的分数S[1..N].如果你能“踏中”第i号箭头,你将获得相应的 ...
- $Luogu P2029$ 跳舞 题解
一道不是十分水的\(dp\). 首先我们考虑\(dp\)方程的构造.起初我定义的状态是\(dp_{i,j}\)表示前\(i\)个格子,总共跳了\(j\)次的最大得分.但事实上它并不可以转移,因为我们不 ...
- 2018.08.16 洛谷P2029 跳舞(线性dp)
传送门 简单的线性dp" role="presentation" style="position: relative;">dpdp. 直接推一推 ...
- 洛谷P2029跳舞
题目 DP, 用的\(dp[i][j]\)表示\(i\)之前的数选了\(j\)个得到的最大结果,然后状态转移方程应该是 \[if (j \% t == 0)~~dp[i][j] = max(dp[i] ...
- DP擎天
DP! 黄题: 洛谷P2101 命运石之门的选择 假装是DP(分治 + ST表) CF 982C Cut 'em all! 树形贪心 洛谷P1020 导弹拦截 单调队列水题 绿题: 洛谷P1594 护 ...
- 动态规划dp专题练习
貌似开坑还挺好玩的...开一个来玩玩=v=... 正好自己dp不是很熟悉,就开个坑来练练吧...先练个50题?小目标... 好像有点多啊QAQ 既然是开坑,之前写的都不要了! 50/50 1.洛谷P3 ...
- Bzoj1305 [CQOI2009]dance跳舞
Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 2925 Solved: 1221 Description 一次舞会有n个男孩和n个女孩.每首曲子开始时 ...
- BZOJ 1305: [CQOI2009]dance跳舞 二分+最大流
1305: [CQOI2009]dance跳舞 Description 一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲 ...
- BZOJ-1305 dance跳舞 建图+最大流+二分判定
跟随YveH的脚步又做了道网络流...%%% 1305: [CQOI2009]dance跳舞 Time Limit: 5 Sec Memory Limit: 162 MB Submit: 2119 S ...
随机推荐
- pod 指令无效
到了新公司,配置pod,死活找不到pod指令,用了很多方法之后,找到了解决办法 sudo vim .bash_profile 然后添加 export PATH=/usr/local/bin:$PATH ...
- 利用bootstrap实现图片Carousel效果
引入头文件: <link rel="stylesheet" href="bootstrap.min.css"> <link rel=" ...
- MySql开启GTID和多线程复制功能
1.修改参数 master: gtid_mode = ON --开启gtid这个必须打开 enforce-gtid-consistency = ON ...
- rsync+lsyncd实现实时同步
1.接收端安装rsync,修改/etc/rsyncd.conf配置文件,然后启动服务. uid = rootgid = rootuse chroot = nomax connection = 4sec ...
- Linux Centos 通过虚拟用户访问FTP的配置
Linux Centos 通过虚拟用户访问FTP的配置 实验需求: 让下面4个虚拟用户使用系统用户ftpvu的权限来连接到Linux FTP服务器,并确保都锁定在 自己的虚拟用户目录,不能切换到其他目 ...
- scrapy--dytt(电影天堂)
喜欢看电影的小伙伴,如果想看新的电影,然后没去看电影院看,没有正确的获得好的方法,大家就可以在电影天堂里进行下载.这里给大家提供一种思路. 1.dytt.py # -*- coding: utf-8 ...
- mysql_old_wrong
DELIMITER $ create trigger auto_post_person_pointafter insert on post for each rowbeginupdate person ...
- Python全栈day 03
Python全栈day 03 一.运算符补充 in ,逻辑运算符,判断某字符或某字符串是否在一个大的字符串中,输出得到bool型数据. value = '我是中国人' v = '我' if v in ...
- 02 mysql 基础二 (进阶)
mysql 基础二 阶段一 表约束 1.not null 非空约束 例子: create table tb1( id int, name varchar(20) not null ); 注意 空字符不 ...
- 基于pandas进行数据预处理
很久没用pandas,有些有点忘了,转载一个比较完整的利用pandas进行数据预处理的博文:https://blog.csdn.net/u014400239/article/details/70846 ...