D - Strange Lunchbox
背包问题
大于等于x状态可以叠加到x上,y同理
code:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn = 3e2 + 9;
int a[maxn];
int f[maxn][maxn];
int n, x, y;
void work()
{
cin >> n >> x >> y;
memset(f, 0x3f, sizeof(f));
f[0][0] = 0;
for(int i = 1; i <= n; ++i)
{
int a, b;cin >> a >> b;
for(int j = x; j >= 0; --j)
for(int k = y; k >= 0; --k)
{
f[min(x,j+a)][min(y,k+b)] = min(f[min(x,j+a)][min(y,k+b)], f[j][k] + 1);
}
}
if(f[x][y] > 300) cout << -1;
else cout << f[x][y];
}
int main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
work();
return 0;
}