2 条题解
-
0
#include <bits/stdc++.h> using namespace std; const int N=55; __int128 a[2*N], f[2*N][2*N]; template<typename T>void qr(T& x) { x=0;int f=1;char c=getchar(); for( ;!isdigit(c);c=getchar())if(c=='-')f=-1; for( ; isdigit(c);c=getchar())x=x*10+c-48; x=x*f; } template<typename T>void qw(T x) { if(x<0)x=-x,putchar('-'); if(x/10)qw(x/10); putchar(x%10+48); } int main() { int n;scanf("%d", &n); for(int i=1;i<=n;i++)qr(a[i]),a[i+n]=a[i]; memset(f, 63, sizeof(f)); for(int k=1;k<=n;k++) for(int i=1;i<=2*n-k;i++) { int j=i+k-1; if(k<=2){f[i][j]=0;continue;} for(int l=i+1;l<=j-1;l++) f[i][j]=min(f[i][j],f[i][l]+f[l][j]+a[i]*a[j]*a[l]); } __int128 ans=__int128(1)<<120; for(int i=1;i<=n;i++) ans=min(ans,f[i][i+n-1]); qw(ans); return 0; } -
0
#include<bits/stdc++.h> using namespace std; const int N=55; __int128 a[2*N],f[2*N][2*N]; template<typename T>void qr(T& x) { x=0;int f=1;char c=getchar(); for( ;!isdigit(c);c=getchar())if(c=='-')f=-1; for( ; isdigit(c);c=getchar())x=x*10+c-48; x=x*f; } template<typename T>void qw(T x) { if(x<0)x=-x,putchar('-'); if(x/10)qw(x/10); putchar(x%10+48); } int main() { int n;scanf("%d",&n); for(int i=1;i<=n;i++)qr(a[i]),a[i+n]=a[i]; memset(f,63,sizeof(f)); for(int k=1;k<=n;k++) for(int i=1;i<=2*n-k;i++) { int j=i+k-1; if(k<=2){f[i][j]=0;continue;} for(int l=i+1;l<=j-1;l++) f[i][j]=min(f[i][j],f[i][l]+f[l][j]+a[i]*a[j]*a[l]); } __int128 ans=__int128(1)<<120; for(int i=1;i<=n;i++) ans=min(ans,f[i][i+n-1]); qw(ans); return 0; }
- 1
信息
- ID
- 1813
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 7
- 标签
- 递交数
- 25
- 已通过
- 9
- 上传者