Dp分析法
#include <iostream>
using namespace std;
const int N = 1010;
int f[N][N]; // f[j][k] 在不超国j个球, k的体力值的情况下所捕捉的最大数量
int main()
{
int n, m, k;
cin >> n >> m >> k;
for(int i = 0; i < k; i++)
{
int v, w;
cin >> v >> w;
for(int j = n; j >= v; j--)
for(int k = m; k >= w; k--)
f[j][k] = max(f[j][k], f[j - v][k - w] + 1);
}
cout << f[n][m - 1] << " ";
//遍历一遍,找在捕捉f[n][m - 1]个精灵的条件下,所需的最小体力
for(int i = 0; i < m; i++)
if(f[n][i] == f[n][m - 1])
{
cout << m - i; // 输出体力剩余值
break;
}
return 0;
}