乘法游戏

xiaoxiao2021-02-28  39

题目:乘法游戏

思路:

f[i][ed]表示[i][ed]段的最小得分,枚举划分点k,f[i][ed]=min(f[i][ed],f[i][k]+f[k][ed]+a[i]*a[k]*a[ed])。

代码:

#include<bits/stdc++.h> using namespace std; #define maxn 100 #define inf (1<<30) int n; int a[maxn+5]; int f[maxn+5][maxn+5]={0}; void readin(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } } int dp(){ for (int j=3;j<=n;j++){ for (int i=1;i<=n-j+1;i++){ int ed=i+j-1; f[i][ed]=inf; for (int k=i+1;k<ed;k++){ f[i][ed]=min(f[i][ed],f[i][k]+f[k][ed]+a[i]*a[k]*a[ed]); } } } return f[1][n]; } int main(){ readin(); int ans=dp(); printf("%d",ans); return 0; }
转载请注明原文地址: https://www.6miu.com/read-2621944.html

最新回复(0)