De. • 10小时前
ACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACAC
评论:
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;
}
请先登录,才能进行评论