#include <iostream>
using namespace std;
int cash, n, m[13], d[13];
int f[100100];
int money, i, v, temp, k;
int solve() {
memset(f, 0, sizeof(f)); // 标记数组 全部为0
money = 0;
f[0] = 1;
//价值为0 肯定 可以用硬币 构造出来 ,,,,标记为 1
for (i=1; i <= n; i++) { // 物品种类
for (v=cash; v >=0; v--) { //背包容量(体积)
if (f[v]) {
for (k=1; k <= m[i]; k++) {
temp = v + k*d[i];
if (temp > cash) break;
if (temp > money) money = temp; // 实际情况 不能构造出来 但money尽可能的 接近
f[temp] = 1; //能构造出来 标记为1
}
}
}
}
return money;
}
int main()
{
while (scanf("%d %d", &cash, &n) != EOF) {
for (i=1; i <= n; i++) {
scanf("%d %d", &m[i], &d[i]);
}
printf("%d\n", solve());
}
return 0;
}
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步