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;
}