(或许你没有听说过dlut这个oj,但我要自豪的的说,她是我大工软院最有爱的地方,没有造作,有软院acmer的信念,有欢笑,有一代代软院acmer的付出!还有许多无节操的好玩的题!)好的,言归正传,作为这次唯一a掉的题,有些不甘,我晚做了3个小时,好吧!下次求突破。(不过还是9ms,目前最快,哈)
题目
舞美拉 wumela
![](http://acm.dlut.edu.cn/upload/201403/dfad59d678548896f86670f5f5b7e3a6.jpg)
![](http://acm.dlut.edu.cn/upload/201403/dfad59d678548896f86670f5f5b7e3a6%281%29.jpg)
舞美拉口头禅:想要我的签名吗?
星座:水瓶座
生日:1月28日
血型:A型
年龄:17岁
生肖:猪
身高:172公分
体重:49公斤
职业:歌手
兴趣:跳舞、唱歌
宠物:波斯猫
最喜欢:吃中国菜
最讨厌:体重增加
偶像:小甜甜布兰尼
语言:中文
中英混血女孩,虽然平时跟爸爸学了一点中文(国语),但不是很流畅。对音乐和舞蹈有着超乎常人的天赋,13岁就获得了少女歌手大赛的冠军,从此进入歌坛,凭借她甜美的歌声和火爆优美的热舞,很快成为少男少女们新的偶像,最新一场的个人演唱会吸引了数万歌迷参加,据说连一向爱听歌仔戏的阿土伯也喜欢听她唱的歌,经常跟着MTV中的舞美拉边唱边跳,还差点扭了腰呢。
生活中的舞美拉心地善良,经常帮爸爸和妈妈做家务,自己的房间也总是装扮地温馨干净,有空的时候就去敬老院做义工,但这并不妨碍她爱美爱打扮,任何衣服经过她的巧手改装,都以其别出心裁的新意成为少女们效仿的对象,她最大的志愿就是成为一位时装设计师。
由于人见人爱,所以被大家称为大富翁世界的青春玉女掌门人。
舞美拉最近迷上了一款音乐游戏。游戏是这样的,玩家要在规定时间内完成一首歌曲,歌曲共有N个音节,各个音节都有相应的分数。如果在相应音节按了对应的按键的话那么就可以得到这个分数。比如某首歌曲,有5个音节,每个音节的分数是2,4,3,6,5。如果舞美拉正确得在第1,3,5个音节按键的话,那么舞美拉可以得到的总分数是2+3+5=10分。
舞美拉虽然是个舞蹈很有天赋的人,但是在玩游戏上手指就不是那么灵敏了。她在正确完成一个音节之后至少要隔T个音节后才能正确完成下一个音节。现在舞美拉想知道,她能拿到的最大分数是多少?
Input
T<=10代表测试数据个数
对每组测试数据
第一行两个整数N,T。N<=10000,代表歌曲的音节数,0<=T<=10在题目描述中提到过
然后是一行N个正整数,第i个整数代表正确完成第i个音节可以得到的分数,每个正整数<=100000000
Output
对每组测试数据,输出舞美拉可以得到的最大分数,每组测试数据占一行。
Sample Input
25 12 4 3 6 55 02 4 3 6 5
Sample Output
1020
1:这题的状态转移方程是:f(x)=max(f(x-t-1)+w[x],max(f(x),f(x-1))); f(x-1)是代表没有隔t+1选;
2:注意在t+1之前的f(x)=w(i);
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=10005;
long long f[maxn];
long long w[maxn];
int main()
{
int T;
scanf("%d",&T);
while(T--){
int n,t;
scanf("%d%d",&n,&t);
for(int i=0;i<n;i++)
scanf("%lld",&w[i]);
memset(f,0,sizeof(f));
for(int i=0;i<t+1;i++)
f[i]=w[i];
for(int v=0;v<n;v++){
if(v>0){
f[v]=max(f[v],f[v-1]);
if(v>=t+1)
f[v]=max(f[v],f[v-t-1]+w[v]);
}
}
long long mx=-1;
for(int i=0;i<n;i++)mx=max(mx,f[i]);
printf("%lld\n",mx);
}
return 0;
}