Multiplication Puzzle POJ - 1651

区间dp

并不困难,这一类问题我的思通常是这样的:
关注最终状态。
我注意到了,最终只会剩一个元素。那么我们可以枚举这最后剩的一个元素。
决定了最后剩的元素就帮助我们把整个区间化成了两个小区间了。
类似分治了。

下面就是愉快的区间dp了

#include<cstdio>
#include<algorithm>
using namespace std;
const int inf = 1e9;
int dp[110][110],a[110],n;
int main(){
    scanf("%d",&n);
    for (int i=1;i<=n;++i)scanf("%d",&a[i]);
    for (int i=1;i<=n;++i)for (int j=i+2;j<=n;++j)dp[i][j]=inf;
    for (int p=3;p<=n;++p)
        for (int i=1,j=i+p-1;j<=n;++i,++j)
            for (int k=i+1;k<j;++k)
                dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+a[k]*a[i]*a[j]);
    printf("%d\n",dp[1][n]);
}
Kuangbin题单详解(区间dp) 文章被收录于专栏

lets go

全部评论

相关推荐

皮格吉:不,有的厂子面试无手撕,可以试试。都是一边学一边面。哪有真正准备好的时候,别放弃
无实习如何秋招上岸
点赞 评论 收藏
分享
09-13 08:41
服装/纺织设计
那一天的Java_J...:你第一次参加面试吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务