算法分析与设计(李清勇)课后习题答案Word文件下载.docx
- 文档编号:13036678
- 上传时间:2022-10-03
- 格式:DOCX
- 页数:16
- 大小:68.52KB
算法分析与设计(李清勇)课后习题答案Word文件下载.docx
《算法分析与设计(李清勇)课后习题答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《算法分析与设计(李清勇)课后习题答案Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
MinWeightTriangulation(N-1,t,s)<
endl;
cout<
最优三角剖分结构为:
Traceback(1,5,s);
//s[i][j]记录了Vi-1和Vj构成三角形的第3个顶点的位置
return0;
}
intMinWeightTriangulation(intn,int**t,int**s)
{
for(inti=1;
i<
=n;
i++)
{
t[i][i]=0;
}
for(intr=2;
r<
r++)//r为当前计算的链长(子问题规模)
for(inti=1;
=n-r+1;
i++)//n-r+1为最后一个r链的前边界
{
intj=i+r-1;
//计算前边界为r,链长为r的链的后边界
t[i][j]=t[i+1][j]+Weight(i-1,i,j);
//将链ij划分为A(i)*(A[i+1:
j])这里实际上就是k=i
s[i][j]=i;
for(intk=i+1;
k<
j;
k++){
//将链ij划分为(A[i:
k])*(A[k+1:
j])
intu=t[i][k]+t[k+1][j]+Weight(i-1,k,j);
if(u<
t[i][j]){
t[i][j]=u;
s[i][j]=k;
}
}
}
returnt[1][N-2];
voidTraceback(inti,intj,int**s){
if(i==j)return;
Traceback(i,s[i][j],s);
Traceback(s[i][j]+1,j,s);
三角剖分顶点:
V"
i-1<
V"
j<
s[i][j]<
intWeight(inta,intb,intc){
returnweight[a][b]+weight[b][c]+weight[a][c];
}5-4数字三角形最短路径
algorithm>
string.h"
#defineMax101
usingnamespacestd;
intD[Max][Max];
intnum;
intMaxSum(intnum){
inti,j;
for(i=num-1;
i>
=1;
i--)
for(j=1;
j<
=i;
j++){
D[i][j]=max(D[i+1][j],D[i+1][j+1])+D[i][j];
}
returnD[1][1];
intmain(intargc,charconst*argv[]){
cin>
>
num;
for(i=1;
i<
=num;
i++)
j++)
cin>
D[i][j];
cout<
MaxSum(num)<
endl;
return0;
5-2游艇租赁问题
#defineN210
intcost[N][N];
intm[N];
intmain()
intn,i,j;
while(cin>
n)
{
for(i=1;
n;
i++)
for(j=i+1;
j++)
cin>
cost[i][j];
m[1]=0;
intmin;
for(i=2;
{
min=cost[1][i];
for(j=1;
=i-1;
{
if(cost[j][i]!
=0&
&
m[j]+cost[j][i]<
min)
min=m[j]+cost[j][i];
}
m[i]=min;
cout<
m[n]<
}
5-6合唱队形问题
#include
1.using
namespace
std;
2.
3.//用于保存子问题最优解的备忘录
4.typedef
struct
5.{
6.
int
maxlen;
//当前子问题最优解
7.
prev;
//构造该子问题所用到的下一级子问题序号(用于跟踪输出最优队列)
8.}Memo;
9.
10.//用于递归输出Memo
B中的解
11.void
Display(int*
A,
Memo*
M,
i)
12.{
13.
if
(M[i].prev
==
-1)
14.
{
15.
cout<
A[i]<
;
16.
return;
17.
}
18.
Display(A,
M[i].prev);
19.
20.}
21.
22.//算法主要部分
23.void
GetBestQuence(int*
n)
24.{
25.
//定义备忘录
并作必要的初始化
26.
Memo
*B
=
new
Memo[n];
//B[i]代表从A[0]到A[i]满足升序剔除部分元素后能得到的最多元素个数
27.
*C
//C[i]代表从A[i]到A[n-1]满足降序剔除部分元素后能得到的最多元素个数
28.
B[0].maxlen
1;
//由于B[i]由前向后构造
初始化最前面的子问题
(元素本身就是一个满足升序降序的序列)
29.
C[n-1].maxlen
//同样C[i]由后向前构造
30.
for
(int
i=0;
i++)
//为前一个最优子问题序号给定一个特殊标识-1
31.
//用于在跟踪路径时终止递归或迭代(因为我们并不知道最终队列从哪里开始)
32.
33.
B[i].prev
-1;
34.
C[i].prev
35.
36.
37.
(i=1;
//构造B[n]
38.
39.
max=1;
40.
j=i-1;
j>
=0;
j--)
//查看前面的子问题
找出满足条件的最优解
并且记录
41.
42.
(A[j]<
A[i]
B[j].maxlen+1>
max)
43.
44.
max
B[j].maxlen+1;
//跟踪当前最优解
45.
//跟踪构造路径
46.
47.
48.
B[i].maxlen
max;
//构造最优解
49.
50.
51.
(i=n-1;
i>
0;
i--)
52.
53.
54.
j=i;
j++)
//从后往前构造
这是为了后面在统筹最终解时可以直接用B[i]+C[i]-1
55.
//否则我们得到的最优解始终为B[n-1]+C[n-1]
56.
57.
C[j].maxlen+1>
//比当前长度更长
记录并构造
58.
59.
C[j].maxlen+1;
60.
61.
62.
63.
C[i].maxlen
64.
65.
66.
//遍历i
得到最大的B[i]+C[i]-1(-1是因为我们在B[i]和C[i]中
均加上了A[i]这个数
因此需要减去重复的)
67.
maxQ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 分析 设计 李清勇 课后 习题 答案