[区间DP] Multiplication Puzzle POJ
来源:互联网 发布:网络棋牌游戏输赢原理 编辑:程序博客网 时间:2024/05/21 10:51
[区间DP] Multiplication Puzzle POJ - 1651
题目大意:给定一个数组,第一个数和最后一个数不能选,每次拿走一个数,得到的价值为该数字和左右相邻的三个数字的乘积,n-2次操作后,求最小的价值为多少。最小的价值定义为n-2次操作的累加和。
分析:首先想到区间DP,dp[i,j],定义为区间[i,j]的最小价值,对于每个区间,我们可以枚举最后取的那个值,dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+num[i-1]*num[k]*num[j]);
AC代码:
#include<stdio.h>#include<stdlib.h>#include<string>#include<string.h>#include<algorithm>#include<set>#include<map>#include<vector>#include<queue>#define MAX 999999999#define MIN -1#define ll long longusing namespace std;int main(){ int n; while(~scanf("%d",&n)) { int num[110]; for(int i=1;i<=n;i++)scanf("%d",&num[i]); int dp[150][150]; memset(dp,0,sizeof(dp)); for(int len=2;len<n;len++) { for(int i=2;i+len<=n+1;i++) { int j=i+len-1; dp[i][j]=MAX; for(int k=i;k<j;k++) dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+num[i-1]*num[k]*num[j]); } } printf("%d\n",dp[2][n]); } return 0;}
阅读全文
0 0
- [区间DP] Multiplication Puzzle POJ
- 【DP】 POJ 1651 Multiplication Puzzle 区间DP
- poj-1651 Multiplication Puzzle 区间DP
- POJ 1651 Multiplication Puzzle (区间DP)
- POJ 1651 Multiplication Puzzle (区间dp)
- POJ 1651 Multiplication Puzzle 区间dp(水
- POJ 1651 Multiplication Puzzle(区间dp)
- poj 1651 Multiplication Puzzle (区间DP)
- POJ 1651 Multiplication Puzzle(区间dp)
- poj 1651 Multiplication Puzzle (区间dp)
- poj 1651 Multiplication Puzzle(区间dp)
- POJ 1651 Multiplication Puzzle(区间DP)
- POJ 1651 Multiplication Puzzle(区间dp)
- POJ 1651 - Multiplication Puzzle(区间DP)
- POJ 1651 Multiplication Puzzle(区间DP)
- POJ 1651 Multiplication Puzzle(区间DP 水题)
- poj 1651 Multiplication Puzzle【区间DP】
- POJ 1651 Multiplication Puzzle (区间DP)
- jquery基础2012
- bootstrap-datepicker 位置错误问题
- kaggle mnist tensorflow+keras
- Linux学习篇第三章之~dovecot & mysql + 空壳邮件
- SQLHelper初见
- [区间DP] Multiplication Puzzle POJ
- 【已测试非常好!】Apache+PHP+MySQL环境搭建
- 如何修改tomcat的端口号 | 让本地也能跑多个tomcat
- Android Studio 常用快捷键
- 腾讯云对象存储——Node.js SDK
- 总帐科目的批量传输与复制
- Android的自定义View的坐标系
- 正则表达式举例说明
- vim精简版