虽然所谓评测鸡强大,但是写丑了照样T
以我的憨憨代码为例
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,m,s[3005],a[3005];
int dp[3005][105],ans;
int val(int l,int r){return (r-l-1)*(r-l)/2*max(a[l],a[r])+a[r]*a[r];}
signed main() {
int flag=0;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>s[i];
if(s[i]==0) flag=i;
}
for(int i=flag;i<=n;i++)
a[i-flag+1]=s[i];
for(int i=1;i<flag;i++)
a[n-flag+i+1]=s[i];
memset(dp,0x3f,sizeof dp),dp[1][1]=0;
for(int i=1;i<=n;i++)
for(int j=2;j<=min(i,m);j++)
for(int k=1;k<i;k++)
dp[i][j]=min({dp[i][j],dp[k][j-1]+val(k,i),dp[k][j==m?j:j-1]+val(k,i)});
int ans=2e9;
for(int i=1;i<=n;i++)
ans=min(ans,dp[i][m]+val(i,n+1));
cout<<ans;
return 0;
}
https://www.luogu.com.cn/record/119381829 T飞起来
所以几个卡常:
加inline,我的加了直接过.
/2写成>>1
max{a,b,c}很慢,不要为压行写一排,老实if快得多
4.for(int j=2;j<=min(i,m);j++)这里,改成j<=i&&j<=m
希望对你有帮助QwQ