luogu1855 榨取kkksc03

题目大意:每个同学有各自愿望,需要花费特定的时间和金钱。你总共有特定的时间和金钱,求最多能满足多少个同学的愿望。

二维背包大水题。

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

const int MAX_N = 110, MAX_V1 = 210, MAX_V2 = 210, MINF = 0xcfcfcfcf;
int V1[MAX_N], V2[MAX_N];
int TotObj, TotV1, TotV2;
int F[MAX_V1][MAX_V2];

int DP()
{
	memset(F, MINF, sizeof(F));
	F[0][0] = 0;
	for (int i = 1; i <= TotObj; i++)
		for (int j = TotV1; j >= V1[i]; j--)
			for (int k = TotV2; k >= V2[i]; k--)
				F[j][k] = max(F[j][k], F[j - V1[i]][k - V2[i]] + 1);
	int ans = 0;
	for (int i = 1; i <= TotV1; i++)
		for (int j = 1; j <= TotV2; j++)
			ans = max(ans, F[i][j]);
	return ans;
}

int main()
{
	scanf("%d%d%d", &TotObj, &TotV1, &TotV2);
	for (int i = 1; i <= TotObj; i++)
		scanf("%d%d", V1 + i, V2 + i);
	printf("%d\n", DP());
	return 0;
}

  

猜你喜欢

转载自www.cnblogs.com/headboy2002/p/9375881.html