【教材信息】
书名:算法设计与分析(第3版)
ISBN:9787302594390
作者:王红梅
【递推法:杨辉三角形】
#include <bits/stdc++.h>
using namespace std;
const int maxn=20;
int a[maxn][maxn];
int main() {
cout<<"Please input an integer (<=10): ";
int n;
cin>>n;
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
a[i][j]=1;
}
}
for(int i=1; i<n; i++) {
for(int j=1; j<i; j++) {
a[i][j]=a[i-1][j]+a[i-1][j-1];
}
}
for(int i=0; i<n; i++) { //Output as an isosceles triangle
for(int k=0; k<26-(5*i/2); k++) {
printf(" ");
}
for(int j=0; j<=i; j++) {
printf("%5d", a[i][j]);
}
printf("\n");
}
return 0;
}
/*
Please input an integer (<=10): 7
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
*/
【分治法:九连环问题】
#include <stdio.h>
#include <string.h>
int step;
void up(int n);
void down(int n);
void down(int n) {
if(n==1)
printf("%d:1 DOWN\n",++step);
else if(n<=0) return;
else {
down(n-2);
printf("%d:%d DOWN\n",++step,n);
up(n-2);
down(n-1);
}
}
void up(int n) {
if(n==1)
printf("%d:1 UP\n",++step);
else if(n<=0) return ;
else {
up(n-1);
down(n-2);
printf("%d:%d UP\n",++step,n);
up(n-2);
}
}
int main() {
int n;
scanf("%d",&n);
printf("UP's step:\n");
step=0;
up(n);
printf("DOWN's step:\n");
step=0;
down(n);
printf("END\n");
return 0;
}
/*
3
UP's step:
1:1 UP
2:2 UP
3:1 DOWN
4:3 UP
5:1 UP
DOWN's step:
1:1 DOWN
2:3 DOWN
3:1 UP
4:2 DOWN
5:1 DOWN
END
*/
【贪心法:田忌赛马】
#include <bits/stdc++.h>
using namespace std;
const int maxn=1000;
int t[maxn],q[maxn];
int money,tlow,qlow,thigh,qhigh;
int main() {
int n;
cin>>n;
for(int i=0; i<n; i++) cin>>t[i];
for(int i=0; i<n; i++) cin>>q[i];
sort(t,t+n);
sort(q,q+n);
tlow=qlow=0;
thigh=qhigh=n-1;
while(tlow<=thigh) {
if(t[thigh]>q[qhigh]) {
money+=200;
thigh--;
qhigh--;
} else if(t[thigh]<q[qhigh]) {
money-=200;
tlow++;
qhigh--;
} else {
if(t[tlow]>q[qlow]) {
money+=200;
tlow++;
qlow++;
} else {
if(t[tlow]<q[qhigh]) money-=200;
tlow++;
qhigh--;
}
}
}
cout<<money<<endl;
return 0;
}
/*
in:
5
5 2 8 6 2
6 1 8 5 3
out:
600
------------
in:
3
92 83 71
95 87 78
out:
200
*/
【动态规划法:数塔问题】文章来源:https://www.toymoban.com/news/detail-699829.html
#include <bits/stdc++.h>
using namespace std;
const int maxn=1005;
const int inf=0x3f3f3f3f;
int a[maxn][maxn];
int f[maxn][maxn];
int ans=-inf;
int main() {
int n;
cin>>n;
for(int i=1; i<=n; i++) {
for(int j=1; j<=i; j++) {
cin>>a[i][j];
}
}
for(int i=1; i<=n; i++) {
for(int j=0; j<=i+1; j++) {
f[i][j]=-inf; //若输入有负数,此段代码就能避坑
}
}
f[1][1]=a[1][1];
for(int i=2; i<=n; i++) {
for(int j=1; j<=i; j++) {
f[i][j]=max(f[i-1][j-1],f[i-1][j])+a[i][j];
}
}
for(int i=1; i<=n; i++) {
ans=max(ans,f[n][i]);
}
cout<<ans<<endl;
return 0;
}
/*
in:
5
13
11 8
12 7 26
6 14 15 8
12 7 13 24 11
out:
86
-----------------------------
in:
5
3
2 6
1 8 7
9 1 3 6
2 5 3 2 1
out:
24
-----------------------------
in:
10
-6
-4 -5
-3 7 5
3 7 -2 1
10 2 -6 2 -6
-8 3 8 6 7 9
-4 -10 0 -3 4 9 2
0 5 5 5 10 -6 -5 -4
-9 7 4 9 8 -5 -2 3 2
-7 -4 0 -10 -8 -4 3 -5 8 9
out:
25
*/
文章来源地址https://www.toymoban.com/news/detail-699829.html
到了这里,关于王红梅《算法设计与分析(第3版)》部分课后实验代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!