dlut1217-dp水题

(或许你没有听说过dlut这个oj,但我要自豪的的说,她是我大工软院最有爱的地方,没有造作,有软院acmer的信念,有欢笑,有一代代软院acmer的付出!还有许多无节操的好玩的题!)好的,言归正传,作为这次唯一a掉的题,有些不甘,我晚做了3个小时,好吧!下次求突破。(不过还是9ms,目前最快,哈)

题目

舞美拉 wumela
 
舞美拉口头禅:想要我的签名吗?
 
星座:水瓶座
生日: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;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值