RQNOJ 329 刘翔!加油!

RQNOJ 329

题面

题目描述

刘翔因伤从北京奥运会的跑道上下来以后,十分的痛苦难过!全国人民看到后都为刘翔加油,支持和关心刘翔!因此,很多人写信来安慰他。没多久,就收到了一大堆信件,可他处理不了这么多,便找到ssxyh处理。ssxyh将信件分了n分,每份信件都有自己的,欣赏价值value,消耗时间time,消耗体力h,和得到的鼓舞w。观看信件必须按照价值递增(大于)的顺序观看,不一定需要全看,例如看了价值45之后就不能再看价值23的了。(为什么?,如果先看了小胡的信当然再看布什的信就不爽了,谁看得下去啊。。。。)可是,翔在伤病中,时间和体力都有限,分别为t,m,同时看完之后体力不能为0(会挂的。。)。这下ssxyh也犯难了,只好请求你帮忙,如何在这些条件下使刘翔获得最大的鼓舞呢?

输入格式

第一行n,m,t(n,m,t<=100)
第二行到n+1行,每行4个数,value,time,h,w.

输出格式

一个数,最大的鼓舞!

样例输入

5 30 20
29 5 3 7
50 2 6 5
25 3 7 3
19 5 5 8
25 6 2 7

样例输出

27

分析

注意

  • 此题中的value没有任何用处!
  • 不需要存储每一种药物,边读入边计算,否则会MLE。(@WJSoier

状态

dp[i][j]表示用i的时间,j的体力得到的最大鼓舞

转移

dp[a][b]=max(dp[a][b],dp[a-time][b-h]+w);

其中time,h,w为这封信的信息。

代码如下

#include <iostream>
#include <string.h>
using namespace std;

int dp[1000][10000];
//     time health
int main()
{
    int n,m,t;
    int time,h,w;
    cin>>n>>m>>t;
    m--;
    while(n--)
    {
        cin>>time>>time>>h>>w;
        for(int a=t;a>=time;a--)
            for(int b=m;b>=h;b--)
                dp[a][b]=max(dp[a][b],dp[a-time][b-h]+w);
    }
    cout<<dp[t][m]<<endl;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值