70分,求助
查看原帖
70分,求助
505959
YangJinxi_7_22楼主2022/10/9 20:21

哪位大佬能帮我看一下这个代码哪里错了?

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <vector>
#include <queue>
using namespace std;
const int N = 205;
int n , m , k;
int f[N][N] , val[N][N] , need[N][N] , cost[N][N];
char c[N][N];
int dp[N][N];

int main( ) {
    cin >> n >> m >> k;
    for( int i = 1 ; i <= n ; i++ ){
        for( int j = 1 ; j <= m ; j++ ){
            cin >> f[i][j] >> c[i][j];
        }
    }
    //memset( dp , 191 , sizeof( dp ) );
    for( int i = 1 ; i <= m ; i++ ) dp[i][0] = 0;
    for( int i = 1 ; i <= m ; i++ ){
        for( int j = n ; j >= 1 ; j-- ){
            val[j][i] = val[j+1][i] + f[j][i];
            cost[j][i] = cost[j+1][i] + (int)( c[j][i] == 'N' );
            if( j == n ) need[j][i] = 1;
            else need[j][i] = need[j+1][i] + (int)( c[j+1][i] == 'N' );
        }
    }
    /*
    for( int i = 1 ; i <= m ; i++ ){
        for( int j = n ; j >= 1 ; j-- ){
            cout << val[j][i] <<" ";
        }cout << endl;
    }
    */
    for( int i = 1 ; i <= m ; i++ ){
        for( int s = 0 ; s <= k; s++ ){
            dp[i][s] = max( dp[i-1][s] , dp[i][s] );
            for( int j = n ; j >= 1 ; j-- ){
                if( need[j][i] <= s ){
                    dp[i][s] = max( dp[i-1][s-cost[j][i]] + val[j][i] , dp[i][s] );
                }//else break;
            }
        }
        //cout << dp[i][k] <<endl;
    }
    cout << dp[m][k] <<endl;
    return 0;
}

2022/10/9 20:21
加载中...