D - Money in Hand
有点像完全背包,但也不是因为有数量的限制,是01背包的变式,每个硬币选与不选,最后看看能不能达到x。
#include<bits/stdc++.h>
using namespace std;
int t[100],w[100],dp[10005];
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>w[i]>>t[i];
}
dp[0]=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=t[i];j++){
for(int k=m;k>=w[i];k--){
if(dp[k-w[i]])dp[k]=1;
}
}
}
if(dp[m]){
cout<<"Yes";
}else{
cout<<"No";
}
}