#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[110],b[110],dp[110][110];
//经验值忍耐度
int main()
{
//freopen("in.txt","r",stdin);
int i,j,k,n,m,s,l;
while(~scanf("%d%d%d%d",&n,&m,&k,&s))//经验值忍耐度种数杀怪数
{
bool flag=0;
for(i=1;i<=k;i++)
scanf("%d%d",&a[i],&b[i]);
memset(dp,0,sizeof(dp));
for(i=1;i<=k;i++)
for(j=b[i];j<=m;j++)
for(l=1;l<=s;l++)//注意是完全背包要升序
dp[j][l]=max(dp[j][l],dp[j-b[i]][l-1]+a[i]);
for(i=1;i<=m;i++)
for(j=1;j<=s;j++)
if(dp[i][j]>=n)
{
flag=1;
printf("%d\n",m-i);
goto judge;
}
judge:
if(!flag)
printf("-1\n");
}
}
【题解】hdu2159二维完全背包
最新推荐文章于 2020-03-08 19:50:52 发布