得分通胀(完全背包)

学生们在 USACO的竞赛中得分越多,我们就越感到高兴。

所以我们要尽量将竞赛设计的能够让更多人得到更高的分。

为了达到这一目的,请你帮助我们选择一些题目作为比赛用题。

共有 N 种类别的题可以让我们进行选择,同一类别的题做对所花的时间以及得到的分数都是相同的。

每种类型的题目出现在一次竞赛中的数量不限,竞赛的时长为 M,即所选题目的总耗时不得超过 M,但可以小于 M。

请问,我们如何安排各种类型的题目在竞赛中出现的数量,能够使得用户的得分最多。

竞赛中不一定要出现所有类型的题目。

输出用户可能的最高得分。

输入格式
第一行包含两个整数 M,N,分别表示竞赛时长以及题目种类数量。

接下来 N 行,每行包含两个整数 p,t,分别表示一种类型题目的分数以及耗时。

输出格式
输出一个整数,表示用户可能得到的最大分数。

数据范围
1≤M,N,p,t≤104
输入样例:
300 4
100 60
250 120
120 100
35 20
输出样例:
605
#include<bits/stdc++.h>
using namespace std;
const int N=10010;
int f[N];
int main(){
    int n,m;
    cin>>n>>m;
    while(m--){
        int w,v;
        cin>>w>>v;
        for(int j=v;j<=n;j++){
            f[j]=max(f[j],f[j-v]+w);
        }
    }
    cout<<f[n]<<endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小王子y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值