#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;
#define LL __int64
const int maxn=110;
const int INF=1e8;
int a[maxn],b[maxn],f[maxn][maxn],m,s,k,n;
int main()
{
while(cin>>n>>m>>k>>s)
{
int i,j,p;
for(i=0;i<k;i++)
cin>>a[i]>>b[i];
memset(f,0,sizeof(f));
for(i=1;i<=m;i++)
{
for(j=0;j<k;j++)
{
for(p=1;p<=s&&b[j]<=i;p++)
f[i][p]=max(f[i-b[j]][p-1]+a[j],f[i][p]);
}
if(f[i][s]>=n)break;
}
if(i>m)cout<<-1<<endl;
else cout<<m-i<<endl;
}
return 0;
}
/*
二维背包
f[i][j]表示消耗i点忍耐度,杀j只怪所能得到的最多的经验
*/
hdu 2159 FATE 二维背包
最新推荐文章于 2024-08-17 03:35:42 发布