目录
题目描述
输入
输出
样例输入 复制
样例输出 复制
提示
代码
题目描述
凯莉王子开了一个魔法师小号来单挑怪兽boss。
怪兽boss的血量为H。
凯莉王子一共会N种魔法,其中第i种魔法需要花费Bi的魔力,能对怪兽boss造成Ai的伤害,每种魔法都可以使用无数次。
请问至少需要多少魔力,才能击杀怪兽boss。
输入
第一行两个整数H,N(1≤H≤104,1≤N≤103)。
接下来N行,每行两个整数Ai,Bi(1≤Ai,Bi≤104)。
输出
一行一个整数,表示至少需要多少魔力。
样例输入
9 3
8 3
4 2
2 1
样例输出
4
提示
样例输入2
100 6
1 1
2 3
3 9
4 27
5 81
6 243
样例输出2
100
样例输入3
9999 10
540 7550
691 9680
700 9790
510 7150
415 5818
551 7712
587 8227
619 8671
588 8228
176 2461
样例输出3
139815
提示
第一组样例对怪兽boss分别使用1,3法术各一次即可。
代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll h,n,mi=2e9,f[110000],i,x,y,j;
main() {
cin >> h >> n;
memset(f,127,sizeof(f));
f[0]=0;
for (i=1; i<=n; i++) {
cin >> x >> y;
for (j=x; j<=100000; j++)
f[j]=min (f[j] , f[j-x]+y);
}
for (i=h; i<=100000; i++)
mi=min(mi,f[i]);
cout << mi;
}
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll h,n,mi=2e9,f[110000],i,x,y,j;
main() {cin >> h >> n;memset(f,127,sizeof(f));f[0]=0;for (i=1; i<=n; i++) {cin >> x >> y;for (j=x; j<=100000; j++)f[j]=min (f[j] , f[j-x]+y);}for (i=h; i<=100000; i++)mi=min(mi,f[i]);cout << mi;
}