ZOJ1602
来源:互联网 发布:战舰少女r魔盒数据库 编辑:程序博客网 时间:2024/06/05 15:02
区间dp
f[l][r] 拿走l r之间的所有卡后的最小值
转移方程为f[l][r]=min(f[l][i]+f[i][r]+ai*al*ar) 1=<i<=r
记忆化搜索就好
#include<bits/stdc++.h>using namespace std;int n;int a[120];int f[120][120];int dp(int l,int r){ if (f[l][r]!=-1) return f[l][r]; if (r-l<=1) { f[l][r]=0; return f[l][r]; } f[l][r]=1200000000; for (int i=l;i<=r;i++) f[l][r]=min(f[l][r],dp(l,i)+dp(i,r)+a[l]*a[r]*a[i]); return f[l][r];}void Gao(){ for (int i=1;i<=n;i++) scanf("%d",a+i); memset(f,-1,sizeof(f)); cout<<dp(1,n)<<endl;}int main(){ while (cin>>n) Gao(); return 0;}
0 0