🔥
ABC153 E - Crested Ibis vs Monster(C++)
問題概要
問題文
体力
のモンスターがいる。 H
種類の魔法があり、 N 番目の魔法を使うとモンスターの体力を i 減らせる。しかし、これを使うにはコスト A_i かかる。 B_i
モンスターの体力を以下にするためには、最低でコストはいくら必要か求めてください。 0
制約
1\leq H\leq10^4 1\leq N\leq 10^3 1\leq A_i\leq 10^4 1\leq B_i\leq 10^4 - 入力はすべて整数
問題リンク
メモ
いかにもdp
とする。なお、
が成り立つ。より正確には、
である。そして、求めるものは
状態数
実装
#include<iostream>
#include<vector>
using namespace std;
int main(){
const int INF=1e9;
int h,n;
cin>>h>>n;
vector<int> a(n),b(n);
for(int i=0;i<n;i++)cin>>a[i]>>b[i];
vector<int> dp(h+1,INF);
dp[h]=0;
for(int i=h;i>=0;i--){
for(int j=0;j<n;j++){
int next_i=max(0,i-a[j]);
dp[next_i]=min(dp[next_i],dp[i]+b[j]);
}
}
cout<<dp[0]<<endl;
}
Discussion