AC

神秘的神秘 · 发布于 2026-06-29 · 浏览 111 回复 1

include <bits/stdc++.h>

using namespace std; int f[201][201]; char c[201][201]; int dp[201][201][2];

int main() {

int n, m, k;
cin >> n >> m >> k;
k = min(k, n * m);
memset(dp, 0x3f, sizeof dp);
dp[0][0][0] = 0;
for (int i = 1; i <= n; i++) {
	for (int j = 1; j <= m; j++) {
		cin >> f[i][j] >> c[i][j];
	}
}
for (int i = 1; i <= m; i++) {
	for (int j = n + 1, tf = 0, tc = 0; j >= 0; j--, tf += f[i][j], tc += (c[j][i] == 'N')) {
		for (int l = 1; l <= k; l++) {
			dp[i][l][1] = max(dp[i][l][1], dp[i - 1][l - tc][1] + tf);
			if (j == n + 1 || c[j][i] == 'Y') {
				dp[i][l][0] = max(dp[i][l][0], dp[i - 1][l - tc][0] + tf);
			} else {
				dp[i][l][1] = max(dp[i][l][1], dp[i - 1][l - tc][0] + tf);
			}
		}
	}
}
cout << dp[m][k][1];
return 0;

}

全部回复 共 1 条

  1. 芹菜本菜 #1 ·

    include <bits/stdc++.h> using namespace std; int f[201][201]; char c[201][201]; int dp[201][201][2];

    int main() {

    int n, m, k; cin >> n >> m >> k; k = min(k, n * m); memset(dp, 0x3f, sizeof dp); dp[0][0][0] = 0; for (int i = 1; i <= n; i++) {

    for (int j = 1; j <= m; j++) {
    	cin >> f[i][j] >> c[i][j];
    }
    

    } for (int i = 1; i <= m; i++) {

    for (int j = n + 1, tf = 0, tc = 0; j >= 0; j--, tf += f[i][j], tc += (c[j][i] == 'N')) {
    	for (int l = 1; l <= k; l++) {
    		dp[i][l][1] = max(dp[i][l][1], dp[i - 1][l - tc][1] + tf);
    		if (j == n + 1 || c[j][i] == 'Y') {
    			dp[i][l][0] = max(dp[i][l][0], dp[i - 1][l - tc][0] + tf);
    		} else {
    			dp[i][l][1] = max(dp[i][l][1], dp[i - 1][l - tc][0] + tf);
    		}
    	}
    }
    

    } cout << dp[m][k][1]; return 0; }

发表回复