求助,91分,卡 #6
查看原帖
求助,91分,卡 #6
1434247
Prefixium楼主2024/8/26 21:10
#include <bits/stdc++.h>
using namespace std;

const int N = 110;
int n, m; 
int dp[N][N], a[N][N]; 

void dfs(int res, int m, int n) {
    if (n == 0) return;
    for (int i = m; i >= 1; i--) {
        if (dp[n][i] == res) {
            dfs(res - a[n][i], i - 1, n - 1);
            cout << i << " ";
        }
    }
}

int main() {
    cin >> n >> m; // f v
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            cin >> a[i][j]; 
        }
    }
    memset(dp, 0xc0, sizeof dp); 
    for (int i = 1; i <= m; i++) {
        dp[1][i] = a[1][i]; 
    }
    for (int i = 2; i <= n; i++) {
        for (int j = i; j <= m; j++) {
            for (int k = 1; k < j; k++) {
                dp[i][j] = max(dp[i][j], dp[i - 1][k] + a[i][j]);
            }
        }
    }
    int ans = -1e9;
    for (int i = 1; i <= m; i++) {
        ans = max(ans, dp[n][i]);
    }
    cout << ans << "\n";
    dfs(ans, m, n);
    return 0;
}
2024/8/26 21:10
加载中...