#include<bits/stdc++.h>
using namespace std;
#define LOCAL //输入输出这个提交时要删了
const int maxn=105;
int n,m,k,s,v[maxn],c[maxn],dp[maxn][maxn];
int main(){
#ifdef LOCAL
freopen(".\\in.txt","r",stdin);
freopen(".\\out.txt","w",stdout);
#endif
while(cin>>n>>m>>k>>s){
memset(dp,0,sizeof(dp));
for(int i=0;i<k;i++)
scanf("%d%d",&v[i],&c[i]);
for(int i=0;i<k;i++)
for(int j=1;j<=s;j++)//二维,多的一维是s吧吧?
for(int l=c[i];l<=m;l++){
dp[l][j]=max(dp[l][j],dp[l-c[i]][j-1]+v[i]);
//从容量为l时 取j个 时的最优
}
int ans=-1;
for(int i=0;i<=m;i++){
if(dp[i][s]>=n){
ans=m-i;//要看容量是否有剩余,所以容量作为i不能固定死。而
break;
}
}
cout<<ans<<endl;
}
}
hdu2159二维背包
最新推荐文章于 2024-10-15 19:28:18 发布