cf1509C
//不要再差一点了
看了题解才过的,卡test6
一开始思路是把一样的数放一堆,根据堆来做dfs,看题解后发现想太多了,直接对区间进行dfs(区间dp学的太菜,没打出来),记忆化搜索也写丑了。
很简单的一道题
dp
while(tt--) {
cin>>n;
int c=0;
rep(i,1,n) cin>>a[i];
sort(a+1,a+1+n);
rep(i,1,n)
rep(j,1,n)
dp[i][j]=1e18;
rep(i,1,n)
rep(j,1,n)
dp[i][i]=0;
for(int i=n;i>=1;i--) {
for(int j=i+1;j<=n;j++)
dp[i][j]=min(dp[i+1][j],dp[i][j-1])+a[j]-a[i];
}
cout<<dp[1][n]<<'\n';
}
dfs
inline ll dfs(int l,int r) {
if(dp[l][r]!=-1) return dp[l][r];//写好记忆化搜索
if(l==r) return 0;
ll ans=1e18;
ans=dfs(l,r-1)+(a[r]-a[l]);
ans=min(dfs(l+1,r)+(a[r]-a[l]),ans);
dp[l][r]=ans;
return ans;
}