
题面: https://www.luogu.org/problemnew/show/P1855
题意
有n个愿望,现有M元和T分钟时间。每个愿望有其自己的所需时间和金钱。求最多可以完成几个愿望。
解法
01背包再加一维即可。注意要倒着循环否则就变成完全背包了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
#define pii pair<int, int> #define ll long long using namespace std; const int maxn = 500 + 10; int t[maxn], m[maxn], ans; int dp[maxn][maxn]; int () { ios::sync_with_stdio(false); cin.tie(0); int n, M, T; cin >> n >> M >> T; for(int i = 0; i < n; i++) cin >> m[i] >> t[i]; for(int i = 0; i < n; i++) { for(int j = M; j >= m[i]; j--) { for(int k = T; k >= t[i]; k--) { dp[j][k] = max(dp[j - m[i]][k - t[i]] + 1, dp[j][k]); ans = max(ans, dp[j][k]); } } } cout << ans << endl; return 0; }
|
近期评论