30分求助
查看原帖
30分求助
542633
ma_yu_chen_楼主2024/8/5 18:15
#include<bits/stdc++.h>
using namespace std;
int n,k,a[105][105],f[105][105],ans,w,y,z,x[105];
queue<int> l[105][105];
bool cmp(int x,int y){
	return x>y;
}
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=i;j++)
            cin>>a[i][j];
	for(int i=1;i<=n;i++){
		for(int j=1;j<=i;j++){
			f[i][j]=max(f[i-1][j],f[i-1][j-1])+a[i][j];
			l[i][j]=max(l[i-1][j],l[i-1][j-1]);
			l[i][j].push(a[i][j]);
        }
    }
	
	for(int i=1;i<=n;i++){
		if(f[n][i]>ans){
			ans=f[n][i];
			w=i;
		}
	}
	int cnt=0;
	while(l[n][w].size()){
		z=l[n][w].front();
		x[++cnt]=z;
		l[n][w].pop();
	}
	sort(x+1,x+cnt+1,cmp);
	ans=0;
	for(int i=1;i<=cnt;i++){
		if(k){
			ans+=x[i]*3;
			k--;
        }
		else  ans+=x[i];
	}
	cout<<ans;
	return 0;
}
2024/8/5 18:15
加载中...