Description
小学期马上就要结束了,为了检验大家的学习成果,老师进行了一次考试。然而小徐前两周半都忙于练习篮球,几乎没有学习,因此考试时很可能做不完所有题目。
但小徐仍然想要拿到尽可能高的分数,因此在做题时需要合理做出取舍。已知考试时间为
![]()
分钟,小徐希望在不超时的情况下,考出最高的分数。
设做出第
![]()
道试题用时为
![]()
, 该试题的”性价比”为
![]()
, (
![]()
为做出该题的得分 )
若选择了
![]()
题进行作答,则所求的分数之和为
![]()
请你帮小徐算出他最高能得多少分。
Input
第一行,为2个正整数,用一个空格隔开:
![]()
,
![]()
,其中
![]()
表示总分钟数,
![]()
为考试的题目数量
从第2行到第
![]()
行,第
![]()
行给出了编号为
![]()
的题目的基本数据,每行有2个非负整数
![]()
,
![]()
.其中
![]()
表示小徐做出该题目的所用时间,
![]()
表示该题目的”性价比”。
Output
一个整数,表示小徐最高能得多少分。
Note
数据保证
![]()
,
![]()
,
![]()
,
![]()
为
![]()
| 测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
|---|---|---|---|---|---|
| 测试用例 1 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
| 测试用例 2 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
C++整体代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<vector<int>> que(m, vector<int>(2));
vector<int> sco(m);
for (int i = 0; i < m; i++) {
cin >> que[i][0] >> que[i][1];
sco[i] = que[i][0] * que[i][1];
}
vector<int> dp(n + 1, 0);
for (int i = 0; i < m; i++) {
for (int j = n; j >= que[i][0]; j--) {
dp[j] = max(dp[j], dp[j - que[i][0]] + sco[i]);
}
}
cout << dp[n]<<endl;
return 0;
}



















