提交时间:2021-05-03 14:26:10

运行 ID: 18982

#include <bits/stdc++.h> using namespace std; long long n,a[105],r[105]; long long ans=INT_MAX; long long f[105][105]; long long c(int x,int y) { return pow(min(abs(a[x]-y),min(100+y-a[x],100+a[x]-y)),2); } void init() { cin>>n>>r[1]; for(int i=1; i<=n; ++i) { a[i]=r[i]%100; r[i+1]=(r[i]*6807+2831)%201701; //cout<<a[i]<<' '; } //cout<<endl; } int main() { init(); memset(f,-INT_MAX,sizeof(f)); for(int i=0; i<=99; i++)f[1][i]=c(1,i); for(int i=2; i<=n; i++) for(int j=i-1; j<=99-(n-i); j++) for(int k=i-2; k<=j-1; k++) f[i][j]=min(f[i][j],f[i-1][k]+c(i,j)); for(int i=n-1; i<=99; i++)ans=min(ans,f[n][i]); cout<<ans<<endl; return 0; }