求助
查看原帖
求助
1276571
jiang_yitao楼主2024/10/4 00:30

记录详情

#include <bits/stdc++.h>
using namespace std;
long long n,a[1005][1005]={},ans_consumption=1e9,ans_sum=-1e9,max_delegation[1005],k=0;
void find_max_delegation() {
	for (long long i=1;i<=n;i++)
		for (long long j=1;j<=i;j++)
			max_delegation[i]=max(max_delegation[i],a[i][j]);
}
void oventurn_right() {
	long long b[1005][1005]={};
	for (long long i=1;i<=n;i++)
		for (long long j=1;j<=i;j++)
			b[i][j]=a[n-j+1][i-j+1];
	for (long long i=1;i<=n;i++)
		for (long long j=1;j<=i;j++)
			a[i][j]=b[i][j];
}
void dynamic_planning(){
	long long dp[1005][1005]={},consumption[1005][1005];
	for (long long i=n;i>=1;i--) {
		for (long long j=1;j<=i;j++) {
			if (consumption[i+1][j]+1>=consumption[i+1][j+1]+1) {
				dp[i][j]=dp[i+1][j+1]+max_delegation[i];
				consumption[i][j]=consumption[i+1][j+1];
				if(max_delegation[i]!=a[i][j])
					consumption[i][j]+=1;
			} else {
				dp[i][j]=dp[i+1][j]+max_delegation[i];
				consumption[i][j]=consumption[i+1][j];
				if(max_delegation[i]!=a[i][j])
					consumption[i][j]+=1;
			}
		}
	}
	if (ans_sum<dp[1][1]) {
		ans_sum=dp[1][1];
		ans_consumption=consumption[1][1]+k;
	} else if (ans_sum==dp[1][1]) {
		ans_sum=dp[1][1];
		ans_consumption=min(ans_consumption,consumption[1][1]+k);
	}
}
int main() {
	cin >>n;
	for (long long i=1;i<=n;i++)
		for (long long j=1;j<=i;j++)
			cin >>a[i][j];
	memset(max_delegation,0,sizeof(max_delegation));
	find_max_delegation();
	dynamic_planning();
	memset(max_delegation,0,sizeof(max_delegation));
	k=5;
	oventurn_right();
	find_max_delegation();
	dynamic_planning();
	memset(max_delegation,0,sizeof(max_delegation));
	k=10;
	oventurn_right();
	find_max_delegation();
	dynamic_planning();
	cout << ans_sum << ' '<<ans_consumption << endl;
    return 0;
}
2024/10/4 00:30
加载中...