70分求助
查看原帖
70分求助
774823
yuhaotian000楼主2025/6/25 11:21
#include <bits/stdc++.h>
#define int long long
using namespace std;
int a[105][105],f[105][105][5055];
signed main(){
    int n,m;
    cin>>n>>m;
    if(m>5050) m=5050;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=i;j++){
            cin>>a[i][j];
        }
    }
    memset(f,-1e18,sizeof f);
    for(int i=1;i<=n;i++){
        f[n][i][0]=a[n][i];
        if(m>=1) f[n][i][1]=a[n][i]*3;
    }
    for(int i=n;i>=2;i--){
        for(int j=1;j<=i;j++){
            for(int k=0;k<=m;k++){
                if(f[i][j][k]==-1e18) continue;
            	if(j>1){
					f[i-1][j-1][k]=max(f[i-1][j-1][k],f[i][j][k]+a[i-1][j-1]);
					if(k+1<=m) f[i-1][j-1][k+1]=max(f[i-1][j-1][k+1],f[i][j][k]+a[i-1][j-1]*3);
				}
				if(j<i){
					f[i-1][j][k]=max(f[i-1][j][k],f[i][j][k]+a[i-1][j]);
					if(k+1<=m) f[i-1][j][k+1]=max(f[i-1][j][k+1],f[i][j][k]+a[i-1][j]*3);
				}
            }
        }
    }
    int maxn=-1e18;
    for(int i=0;i<=m;i++){
        maxn=max(f[1][1][i],maxn); 
    }
    cout<<maxn;
}
2025/6/25 11:21
加载中...