OJ题目:click here~~~
题目分析:两个费用,一是忍耐度,一是杀怪数,容量分别为m , s。二维费用背包问题。见背包问题九讲。
AC_CODE
int main()
{
int n , m , k , s , i , j;
int v[101] , c[101] , dp[101][101] , kk;
while(cin >> n >> m >> k >> s)
{
for(i = 1;i <= k;i++)
{
scanf("%d%d",&v[i],&c[i]);
}
memset(dp , 0 , sizeof(dp));
for(i = 1;i <= k;i++)
for(j = c[i];j <= m;j++)
for(kk = 1;kk <= s;kk++)
dp[j][kk] = max(dp[j][kk] , dp[j - c[i]][kk - 1] + v[i]);
for(i = 1;i <= m;i++)
if(dp[i][s] >= n)
break;
if(i > m) cout << -1 << endl;
else
cout << m - i << endl;
}
return 0;
}