D - Money in Hand

发布时间 2023-12-28 11:47:34作者: yufan1102

image
image

有点像完全背包,但也不是因为有数量的限制,是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"; 
	}
}