Multiplication Puzzle POJ
来源:互联网 发布:62式轻坦数据 编辑:程序博客网 时间:2024/06/08 16:13
题意:给你一组数字,第一个和最后一个数字不可以取出去,其它任意取出去,当你要取出一个数字时,它有一个代价,这个代价就是与它相邻的两个数的乘积,求除了首位两位数字,把其他数字都取出来,它们的代价之和的最小值
和矩阵连乘求最小乘法次数一样的,乍一看,似乎要保存的状态很多,但是我们枚举一个区间内最后被取出的数的话,它左右两边的数也都确定了,而且区间分成了两部分,这两部分也都是相互独立了,也就是无后效性。
下面是一个很好的分析过程
对于整个牌的序列,最左端和最右端的牌是不能被取走的,除这两张以外的所有牌
> ,必然有一张最后取走。取走这最后一张牌有一个仅与它本身以及最左端和最右端的
> 牌的值有关的得分,这个分值与其他牌没有任何关系。当这张最后被取走的牌被定
> 下来以后(假设位置为j), 最左端到j之间的所有牌被取走时所造成的得分必然只与
> 这之间的牌有关从而与j到最右端之间的牌独立开来。这样就构成了两个独立的子
> 区间,出现重叠子问题。于是问题的解就是
> 取走最后一张牌的得分+两个子区间上的最小得分
> 不妨假设当前区间为[b, e],在(b,e)之间枚举最后一张被取走的牌,通过最优子问题
> 求出当前区间的最优解:
> opt[b][e] = min{ opt[b][j]+opt[j][e] + val(b,j,e); };
> b+1<= j <=e-1
> val(b,j,e)是取走j所造成的得分,即第b,j,e这三张牌的积。
> 空间o(n^2), 时间o(n^3)
#include <iostream> #include <cstdio> #include <bitset> #include <cstring> #include <algorithm> #include <vector> #include <map> #include <cmath> #include <set> #include <queue> using namespace std; typedef long long ll; const int INF=1e9+100; const int mod=1e9+7;int a[105],d[105][105];int main(){ //freopen("out.txt","w",stdout); int n; while(scanf("%d",&n)!=EOF){ for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=0;i<=n;i++) for(int j=0;j<=n;j++) d[i][j]=INF; for(int i=n-2;i>=1;i--){ for(int j=i+2;j<=n;j++){ for(int k=i+1;k<=j-1;k++){ if(k==i+1&&k==j-1){ d[i][k]=d[k][j]=0; } d[i][j]=min(d[i][j],d[i][k]+d[k][j]+a[i]*a[k]*a[j]); } } } printf("%d\n",d[1][n] ); } return 0;}
- poj Multiplication Puzzle
- POJ 1651 Multiplication Puzzle
- poj 1651 Multiplication Puzzle
- POJ 1651 Multiplication Puzzle
- poj 1651 Multiplication Puzzle
- POJ 1651 Multiplication Puzzle
- Poj 1651 Multiplication Puzzle
- POJ 1651 Multiplication Puzzle
- POJ 1651 Multiplication Puzzle
- Multiplication Puzzle POJ 1651
- poj 1651 Multiplication Puzzle
- poj Multiplication Puzzle(DP)
- POJ 1651:Multiplication Puzzle
- Poj 1651 Multiplication Puzzle
- POJ 1651 Multiplication Puzzle
- POJ 1651 Multiplication Puzzle
- POJ 1651 Multiplication Puzzle
- poj 1651 Multiplication Puzzle
- c函数---fgets,fgetc,gets,getchar,getc区别
- salesforce零基础学习(七十五)浅谈SOSL(Salesforce Object Search Language)
- 4316: 小C的独立集
- Redis的安装和使用之三redis.conf配置释义 2016-01-14 13:44 Redis配置文件被分成几大块区域,分别是: 1.通用(general) 2.快照(snapshottin
- Linux下web环境的搭建【java+Mysql+tomcat+Redis】(Centos 6.5)
- Multiplication Puzzle POJ
- 第3章:RDD编程
- 一组图片上下抖动
- Hibernate hql getHibernateTemplate()常用方法汇总
- Spring三大核心思想之三:AOP
- 使用STS创建基于maven的java web项目
- Redis主从复制基本配置
- JavaScript Json与Map互转以及Map对象的取值方式
- php 一些实用简单栗子一 汉子转拼音