动态规划16:1022(01背包,有俩限制,求最大值)
作者:
总打瞌睡的天天啊
,
2024-10-15 21:15:39
,
所有人可见
,
阅读 2
//f[i][j][k],表示前i个精灵,最多用j个球,血量最大为k,所抓到精灵的最大数
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1010,M=510;
int s[N],l[N];
int f[N][M];
int main()
{
int sum,life,n;
cin>>sum>>life>>n;
for(int i=1;i<=n;i++)
{
int a,b;
cin>>a>>b;
for(int j=sum;j>=a;j--)
for(int k=life;k>b;k--)
f[j][k]=max(f[j][k],f[j-a][k-b]+1);
}
//尽量少受伤,找到最小血的那个
for(int i=1;i<=life;i++)
{
if(f[sum][life]==f[sum][i])
{
cout<<f[sum][life]<<' '<<life-i+1;
break;
}
}
return 0;
}