hdu2159二维背包

题目

int dp[2005][2005];
int main(){
	SIS;
	int n,m,k,s;
	int a[105],b[125];
	//还需经验,忍耐度,种类,最多杀怪数 
	while(cin>>n>>m>>k>>s){
		for(int i=0;i<k;i++){
			cin>>a[i]>>b[i];
		}
		memset(dp,0,sizeof(dp));
		for(int i=0;i<k;i++){//种类 
			for(int p=1;p<=s;p++){//杀怪数 
				for(int j=b[i];j<=m;j++){//忍耐度 
					dp[p][j]=max(dp[p][j],dp[p-1][j-b[i]]+a[i]); 
				}
			}
		}
		if(dp[s][m]<n){
			cout<<"-1"<<endl;
			continue;
		}
		int ans=0;
		for(int j=1;j<=m;j++){
			if(dp[s][j]>=n){
				ans=j;break;
			}
		}
		cout<<m-ans<<endl; 
	}
	return 0;
}
发布了20 篇原创文章 · 获赞 2 · 访问量 249

猜你喜欢

转载自blog.csdn.net/weixin_45535964/article/details/105218446
今日推荐