解法:
#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int N = 1e5+3;
int v[N],c[N],dp[N];
int main() {
int n,m;
cin>>n;
for (int i=1;i<=n;i++){
cin>>v[i]>>c[i];
}
cin>>m;
for (int i=1;i<=m;i++){
dp[i] = INF;
}
for (int i=1;i<=n;i++){
for (int j=1;j<=c[i];j++){
for (int k=m;k>=v[i];k--){
dp[k] = min(dp[k],dp[k-v[i]]+1);
}
}
}
cout<<((dp[m]==INF)?-1:dp[m])<<endl;
return 0;
}