学生们在 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;
}