ACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACAC
全部回复 共 1 条
-
include <bits/stdc++.h>
using namespace std; int dp[2][2001][2001];
int main() {
int n; int m1, p1, m2, p2, kk; cin >> n; memset(dp, 0xf3, sizeof dp); dp[0][1000][1000] = 0; int ans = -1; for (int i = 1; i <= n; i++) { cin >> m1 >> p1 >> m2 >> p2 >> kk; for (int j = 0; j <= 2000; j++) { for (int k = 0; k <= 2000; k++) { if (j - m1 >= 0 && k - p1 >= 0 && j + m2 <= 2000 && k + p2 <= 2000) { dp[i%2][j][k] = max(dp[(i-1)%2][j - m1][k - p1], dp[(i-1)%2][j + m2][k + p2] + kk); } else if (j - m1 >= 0 && k - p1 >= 0) { dp[i%2][j][k] = dp[(i-1)%2][j - m1][k - p1]; } else if(j + m2 <= 2000 && k + p2 <= 2000){ dp[i%2][j][k] = dp[(i-1)%2][j + m2][k + p2] + kk; } } } } for (int j1 = 1000; j1 <= 2000; j1++) { for (int k1 = 1000; k1 <= 2000; k1++) { ans = max(ans, dp[n%2][j1][k1]); } } cout << ans; return 0;}
发表回复
登录后即可回复本帖,与出题人和同学一起讨论。
登录