AcWing 1022. 宠物小精灵之收服__解法二
原题链接
简单
作者:
ChinaPie
,
2019-09-25 16:01:25
,
所有人可见
,
阅读 1463
参考了墨染空同学的解法二写的代码,时间复杂度O(M(K^2))
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int INF = 0x3f3f3f3f;
const int N = 1010;
int V1;
int V2;
int f[N][N];
int n, m, k;
int main()
{
scanf("%d%d%d",&n,&m,&k);
memset(f, 0x3f, sizeof f);
for(int i = 0; i <= m - 1; i ++)
f[0][i] = 0;
for(int i = 0; i < k; i ++)
{
cin >> V1 >> V2;
for(int j = k; j >= 1; j -- )
{
for(int g = m - 1; g >= V2; g --)
{
if(f[j - 1][g - V2] + V1 <= n)
f[j][g] = min(f[j][g], f[j - 1][g - V2] + V1);
}
}
}
int res;
for(int i = k; i >= 0; i --)
if(f[i][m - 1] != INF)
{
res = i;
break;
}
int ans = m - 1;
while(ans > 0 && f[res][ans - 1] <= n) ans --;
cout << res << " " << m - ans << endl;
return 0;
}