General
 
 
# Author Problem Lang Verdict Time Memory Sent Judged  
187501711 Practice:
DaiRuiChen007
1666J - 23 C++14 (GCC 6-32) Accepted 62 ms 1276 KB 2023-01-01 10:47:51 2023-01-01 10:47:51
→ Source
// LUOGU_RID: 98429027
#include<bits/stdc++.h> 
#define int long long
using namespace std;
const int MAXN=201,INF=1e17;
int dp[MAXN][MAXN],rt[MAXN][MAXN],c[MAXN][MAXN],sum[MAXN][MAXN],fa[MAXN];
inline void dfs(int l,int r,int f) {
	if(l>r) return ;
	int k=rt[l][r];
	fa[k]=f;
	dfs(l,k-1,k),dfs(k+1,r,k);
}
inline int cnt(int r1,int r2,int c1,int c2) {
	if(r1>r2||c1>c2) return 0;
	return sum[r2][c2]-sum[r2][c1-1]-sum[r1-1][c2]+sum[r1-1][c1-1];
}
signed main() {
	int n;
	scanf("%lld",&n);
	for(int i=1;i<=n;++i) {
		for(int j=1;j<=n;++j) {
			scanf("%lld",&c[i][j]);
			sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+c[i][j];
		}
	}
	for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) dp[i][j]=INF;
	for(int i=1;i<=n;++i) dp[i][i]=0,rt[i][i]=i;
	for(int len=1;len<n;++len) {
		for(int l=1,r=l+len;r<=n;++l,++r) {
			for(int k=l;k<=r;++k) {
				int val=cnt(l,k-1,1,l-1)+cnt(l,k-1,k,n)+cnt(k+1,r,1,k)+cnt(k+1,r,r+1,n)+(k==l?0:dp[l][k-1])+(k==r?0:dp[k+1][r]);
				if(val<dp[l][r]) rt[l][r]=k,dp[l][r]=val;
			}
		}
	}
	dfs(1,n,0);
	for(int i=1;i<=n;++i) printf("%lld ",fa[i]);
	puts("");
	return 0;
}
?
Time: ? ms, memory: ? KB
Verdict: ?
Input
?
Participant's output
?
Jury's answer
?
Checker comment
?
Diagnostics
?
Click to see test details