ZOJ 1276 DP
给出一系列的1x2的矩阵,要你求出矩阵以什么样的次序相乘才使得相乘次数最少,。(不用排序,只要决定该矩阵是和前面相乘比较好,还是后面)。
今天仔细想了一下,跟之前做的DP题目做了下对比,你比如说猴子堆砖块拿香蕉那题,那种是通过设定局部量j,求得1到j的局部最优解,再递增j,直到求得全局最优解
这种题目,由于两两之间不同的顺序就能产生不同解,所以,是通过设定局部量j,求得相隔为j的两矩阵相乘的最优解,再递增j,直到全局。
一开始我的思路就局限在第一种,所以怎么想也没理清怎么写。
还有,这个题目输出比较麻烦,在DP过程中,用一个二维数组记录求得i到j之间最优解的时候,是哪个矩阵在前面。
通过递归的方式输出,好厉害,膜拜浙西贫农大神。
#include <iostream>
#include <cstdio>
using namespace std;
int dp[][];
int a[],b[];
int rec[][];
void print(int i,int j)
{
if (i==j){
cout<<"A"<<i;
return;
}
if (i<j){
cout<<"(";
print(i,rec[i][j]);
cout<<" x ";
print(rec[i][j]+,j);
cout<<")";
}
}
int main()
{
int n;
int cases=;
while (scanf("%d",&n)&&n){
int i,j,k;
for (i=;i<=n;i++){
scanf("%d %d",&a[i],&b[i]);
}
for (j=;j<=n;j++){
for (k=;k<=n;k++){
if (j==k) dp[j][k]=;
else
dp[j][k]=<<;
rec[j][k]=j;
}
}
int p;
for (p=;p<=n-;p++){
for (i=;i<=n-p;i++){
j=p+i;
int temp;
for (k=i;k<=j-;k++){
temp=dp[i][k]+dp[k+][j]+a[i]*b[k]*b[j];
if (temp<dp[i][j]){
dp[i][j]=temp;
rec[i][j]=k;
// cout<<"rec "<<i<<" "<<j<<" "<<k<<" "<<temp<<endl;
}
} }
}
cout<<"Case "<<cases<<": ";
cases++;
print(,n);
putchar('\n');
}
return ;
}
ZOJ 1276 DP的更多相关文章
- 矩阵连乘积 ZOJ 1276 Optimal Array Multiplication Sequence
题目传送门 /* 题意:加上适当的括号,改变计算顺序使得总的计算次数最少 矩阵连乘积问题,DP解决:状态转移方程: dp[i][j] = min (dp[i][k] + dp[k+1][j] + p[ ...
- ZOJ 1276 "Optimal Array Multiplication Sequence"(最优矩阵链乘问题+区间DP)
传送门 •题意 矩阵 A(n×m) 和矩阵 B(m×k) 相乘,共做 n×m×k 次乘法运算: 给你 n 个矩阵,求这 n 个矩阵的最优结合方式,使得做的总乘法运算次数最少: •题解 定义dp(i,j ...
- ZOJ 1276 Optimal Array Multiplication Sequence(矩阵连乘)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1276 裸的矩阵连乘问题. #include<iostream> ...
- ZOJ 1454 dp
Employment Planning Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu S ...
- zoj 3644(dp + 记忆化搜索)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4834 思路:dp[i][j]表示当前节点在i,分数为j的路径条数,从 ...
- Deck of Cards ZOJ - 2852 dp 多决策 三维 滚动更新
题意:一个特殊21点游戏 具体http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2852 题解:建一个三维dp,表示三个卡槽分别 ...
- ZOJ - 3632 DP 单调优化
题意:买瓜,每天的瓜有不同的价格和xu命时间,要求能苟到第n天的最小代价 定义DP方程\(dp[i]\),指苟到第\(i\)天的最小代价,所求即为\(dp[n]\) 那么怎么转移就是问题,这里的状态表 ...
- ZOJ - 2402 DP方案数
题意:给出m,序列第i位是第i-1位的至少2倍大,的求长度为n且每一位范围均在1-m的序列方案数 对求方案数做不到信手拈来的感觉,需要加强 用简单的预处理和最优子结构能优化到很不错的效率了 #incl ...
- zoj 3349 dp + 线段树优化
题目:给出一个序列,找出一个最长的子序列,相邻的两个数的差在d以内. /* 线段树优化dp dp[i]表示前i个数的最长为多少,则dp[i]=max(dp[j]+1) abs(a[i]-a[j])&l ...
随机推荐
- docker 构建php-fpm IMages(dockerfile)
好久没写blog 做什么? 复习nginx zabbix docker-compos mariadb 学习 jenkins ansible ELK k8s (kubeadm) 好了也 ...
- P 1007 素数对猜想
转跳点:
- CodeForces - 755B PolandBall and Game(博弈)
题意:A和B两人每人都熟悉一些单词.A先开始,每人说一个单词,单词不能与两人之前说过的所有单词重复,谁无话可说谁输.两人可能有共同会的单词. 分析:因为要让对方尽量无单词可说,所以每个人优先说的都是两 ...
- ArrayList与LindedList区别
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList ...
- 一百一十、SAP的OO-ALV之四,定义屏幕相关变量和逻辑流
一.代码如下,定义相关变量 二.来带屏幕页面,双击STATUS_9000和USER_COMMAND_9000,自动生成相应代码 三.点击是 四.会自动生产关联的Includ文件 五.我们自己创建一个M ...
- 十六、SAP中查看数据库
一.我们输入事务代码SE11 二.我们输入数据库表 : “SPFLI” 三.我们可以查看到这个表相关的数据,这个是SAP自带的一个教学案例表. 四.我们点击Display,来查看这个表内容 五.点击查 ...
- Swift 枚举enum
enum methodType{ case get case post case put case delete } 枚举赋值 enum methodType:String{ case get=&qu ...
- v2??? 重启失败
v2??? 重启失败, 提示 Authorization not available. Check if polkit service is running or see debug message ...
- php srand()和rand()
1.rand()函数 作用:返回随机整数 用法:rand(min,max) min和max规定随机数产生的范围,可以省略不写,不写时rand() 返回 0 到 RAND_MAX 之间的伪随机整数. ...
- Linux用户管理 权限管理 内存管理 网络管理命令 (第四天)
默认添加的用户会自动加入和用户名一样的组中su 切换用户查看当前登陆的用户: whoami id`查看当前用户属于哪个组:groupsgroupadd 组名 添加组groupdel 组名 删除组gre ...