AC

De.  •  10小时前


ACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACAC


评论:

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;

}


De.  •  10小时前

请先登录,才能进行评论