题意:传送门
题解:加了一个杀的怪兽数量的总限制,只需要多加一维数组即可,挺板的的一道题。
附上代码:
#include<bits/stdc++.h>
using namespace std;
const int maxm=1e2+5;
const int maxs=1e2+5;
const int maxn=1e2+5;
int n,m,k,s;
int dp[maxm][maxs];
int w[maxn],v[maxn];
int main()
{
while(scanf("%d%d%d%d",&n,&m,&k,&s)!=EOF){
for(int i=0;i<k;i++){
scanf("%d%d",&w[i],&v[i]);
}
memset(dp,0,sizeof(dp));
for(int i=0;i<k;i++){
for(int j=v[i];j<=m;j++){
for(int l=1;l<=s;l++){
dp[j][l]=max(dp[j][l],dp[j-v[i]][l-1]+w[i]);
// cout<<l<<" "<<dp[j][l]<<" ";
}
// cout<<endl;
}
}
int flag=0;
for(int i=0;i<=m;i++){
for(int j=0;j<=s;j++){
if(dp[i][j]>=n){
printf("%d\n",m-i);
flag=1;
break;
}
}
if(flag){
break;
}
}
if(!flag){
printf("-1\n");
}
}
return 0;
}