rb复。2

#include<bits/stdc++.h>
using namespace std;
const int maxn=1000+5;
const int inf=0x3f3f3f3f;
int n,m,c[maxn],v[maxn],dp[30*maxn];
//dp[第几个[空间 
int main(){
	cin>>n>>m;
	memset(dp,inf,sizeof(dp));dp[0]=0;
	for(int i=1;i<=n;i++) scanf("%d",&v[i]);
	for(int i=1;i<=n;i++) scanf("%d",&c[i]);
	for(int i=1;i<=n;i++)
		for(int j=30*maxn-1;j>=c[i];j--){
			dp[j]=min(dp[j-c[i]]+v[i],dp[j]);				
		}
	for(int i=30005;i>=0;i--){
		if(dp[i]<=m) {
			cout<<i<<endl;break;
		}
	} 
}

猜你喜欢

转载自blog.csdn.net/weixin_50904510/article/details/121047006