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