描述
有n種千裡馬,每一種都有若幹匹,第ii種馬的顔值ai,價格di.現有m個牧馬人要去挑選千裡馬,每一位牧馬人對馬的顔值都有要求:{所選馬的顔值總和}⩾Ai.現在讓你來為牧馬人做滿足要求的最低預算.
輸入
單組測試資料,第一行兩個整數n,m(1≤n,m≤1e4).
接下來n行,每行兩個整數a1,d1,a2,d2,...an,dn.
最後一行m個整數A1,A2,...Am(1≤ai,di,Ai≤1e4).
輸出
輸出m個整數占一行,用空格隔開,表示每一位牧馬人的最低花費.
輸入樣例 1
2 2
1 2
2 1
5 5
輸出樣例 1
3 3
#include<iostream>
#include<cstring>
using namespace std;
int a[150000];
int d[150000];
int peo[150000];
int dp[150000];
int main(){
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>a[i]>>d[i];
}
int mmax=-1;
for(int i=0;i<m;i++){
cin>>peo[i];
mmax=max(mmax,peo[i]);
}
memset(dp,0x3f3f3f3f,sizeof(dp));
dp[0]=0;
for(int i=0;i<n;i++){
for(int j=1;j<=mmax;j++){
if(j>a[i])
dp[j]=min(dp[j],dp[j-a[i]]+d[i]);
else
dp[j]=min(d[i],dp[j]);
}
}
for(int i=0;i<m;i++){
if(i!=m-1){
cout<<dp[peo[i]]<<" ";
}
else
cout<<dp[peo[i]]<<endl;
}
return 0;
}