AC

芹菜本菜 · 发布于 2026-06-07 · 浏览 139 回复 1

ACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACAC

全部回复 共 1 条

  1. 芹菜本菜 #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;
    

    }

发表回复