50pts,dp求调
查看原帖
50pts,dp求调
1041666
Jerry555楼主2025/7/25 20:39

AC #1~#4、#7

#include <iostream>
#include <algorithm>
#include <climits>
using namespace std;
long long dp[101][101][5151];
int main(){
    int n,k;
    cin >> n >> k;
    long long a[n][n];
    for(int i=0;i<n;i++)for(int j=0;j<=i;j++)cin >> a[i][j];
    dp[0][0][0]=a[0][0];
    if(k>0)dp[0][0][1]=a[0][0]*3;
    for(int i=1;i<n;i++)for(int j=0;j<=i;j++)for(int l=0;l<=k;l++){
        if(j==0){
            if(l==0)dp[i][j][l]=dp[i-1][j][l]+a[i][j];
            else dp[i][j][l]=max(dp[i-1][j][l-1]+a[i][j]*3,dp[i-1][j][l]+a[i][j]);
        }else if(j==i){
            if(l==0)dp[i][j][l]=dp[i-1][j-1][l]+a[i][j];
            else dp[i][j][l]=max(dp[i-1][j-1][l-1]+a[i][j]*3,dp[i-1][j-1][l]+a[i][j]);
        }else{
            if(l==0)dp[i][j][l]=max(dp[i-1][j][l],dp[i-1][j-1][l])+a[i][j];
            else{
                dp[i][j][l]=max(dp[i-1][j][l-1],dp[i-1][j-1][l-1])+a[i][j]*3;
                dp[i][j][l]=max(dp[i][j][l],max(dp[i-1][j][l],dp[i-1][j-1][l])+a[i][j]);
            }
        }
    }
        
    
    long long maxn=LLONG_MIN;
    for(int j=0;j<n;j++)for(int l=0;l<=k;l++)maxn=max(maxn,dp[n-1][j][l]);
    cout << maxn << endl;
}
2025/7/25 20:39
加载中...