题目大意:每个同学有各自愿望,需要花费特定的时间和金钱。你总共有特定的时间和金钱,求最多能满足多少个同学的愿望。
二维背包大水题。
#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; }