2 条题解
-
0
#include<bits/stdc++.h> using namespace std; const int N=310; int n, a[N], ans[N], f[N][N], root[N][N], tot; struct node{int l, r;}; deque<node> q; int main() { cin >> n; for(int i=1; i<=n; i++) cin >> a[i]; memset(f, 0, sizeof(f)); for(int L=2; L<=n; L++) { for(int i=1; i<=n-L+1; i++) { int j = i + L - 1; for(int k=i; k<j; k++){ if(f[i][j] < f[i][k] + f[k+1][j] + (a[i] + a[j]) * a[k]){ f[i][j] = f[i][k] + f[k+1][j] + (a[i] + a[j]) * a[k]; root[i][j] = k; } } } } cout << f[1][n] << endl; q.push_back({1, n}); while(!q.empty()) { int l = q.front().l, r = q.front().r; int k = root[l][r]; if(root[l][k] > 0) q.push_back({l, k}); if(root[k+1][r] > 0) q.push_back({k+1, r}); printf("%d ", k); q.pop_front(); } return 0; } -
0
#include<bits/stdc++.h> using namespace std; const int N=310; int n, a[N], ans[N], f[N][N],root[N][N], tot; struct node{int l,r;}; deque<node>q; int main() { cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; memset(f,0,sizeof(f)); for(int L=2;L<=n;L++) { for(int i=1;i<=n-L+1;i++) { int j = i + L-1; for(int k=i;k<j;k++) { if(f[i][j]<f[i][k]+f[k+1][j]+(a[i]+a[j])*a[k]) { f[i][j]=f[i][k]+f[k+1][j]+(a[i]+a[j])*a[k]; root[i][j]=k; } } } } cout<<f[1][n]<<endl; q.push_back({1,n}); while(!q.empty()) { int l=q.front().l,r=q.front().r; int k=root[l][r]; if(root[l][k]>0)q.push_back({l,k}); if(root[k+1][r]>0)q.push_back({k+1,r}); printf("%d ",k);q.pop_front(); } return 0; }
- 1
信息
- ID
- 1815
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 9
- 标签
- 递交数
- 9
- 已通过
- 6
- 上传者