Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
18982 | 王循 | 加强版密码锁 | C++ | 通过 | 100 | 0 MS | 348 KB | 699 | 2021-05-03 14:26:10 |
#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; }