算法第三章上机实验

算法第三章上机实验

数字三角形

给定一个由 n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大。

#include <iostream>

using namespace std;

int maxsum(int a[100][100],int n){

int b[100][100]={0};

for(int i=n-1;i>=0;i--){

for(int j=i;j>=0;j--){

b[i][j]=((b[i+1][j]<b[i+1][j+1])?b[i+1][j+1]:b[i+1][j])+a[i][j];

}

}

return b[0][0];

}

int main(){

int n;

int a[100][100];

cin>>n;

for(int i=0;i<n;i++){

for(int j=0;j<=i;j++){

cin>>a[i][j];

}

}

cout<<maxsum(a,n);

return 0;

}

最大子段和

#include<iostream>

using namespace std;

int getmax(int c[],int n){

int b[10];

b[0]=c[0];

for(int i =1;i<n;i++){

if(b[i-1]>0){

b[i]=b[i-1]+c[i];

}

else b[i]=c[i];

}

int max=b[0];

for(int i =1;i<n;i++){

if(b[i]>max) max=b[i];

}

return max;

}

int main(){

int c[10],n,flag=0;

cin>>n;

for(int i=0;i<n;i++){

cin>>c[i];

if (c[i]<0){

flag++;

}

}

if(flag==n){

cout<<0;

}

else{

int max = getmax(c,n);

cout<<max;}

return 0;

}

编辑距离问题

#include <iostream>

#include <stdio.h>

#include <cstring>

using namespace std;

int main(){

char a[2005],b[2005];

cin>>(a+1);

cin>>(b+1);

int n, m;

n = strlen(a+1);

m = strlen(b+1);

int **s=new int*[n+1];

for(int i=0;i<=n;i++)  s[i]=new int[m+1];

for(int i=0;i<=n; i++){

s[i][0]=i;

}

for(int j = 0;j<= m; j++){

s[0][j] = j;

}

for(int i=1;i<=n;i++)

{

for(int j=1;j<=m;j++)

{

if(a[i]==b[j]){

s[i][j] = s[i-1][j-1];

}else{

s[i][j] = min(min(s[i-1][j]+1,s[i][j-1]+1),s[i-1][j-1]+1);

}

}

}

printf("%d",s[n][m]);

}

原文地址:https://www.cnblogs.com/yucuiwencookies/p/9940426.html

时间: 2024-08-28 06:11:40

算法第三章上机实验的相关文章

算法第三章上机实验报告

1.实践题目 7-2 最大子段和 2.问题描述 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的子段和的最大值.当所给的整数均为负数时,定义子段和为0. 要求算法的时间复杂度为O(n). 3.算法描述 首先将数据保存到一个数组内,然后建立一个循环来遍历这些数组,定义一个sum来保存和,定义一个max来保存最大值,对于每次遍历的结果x,如果sum为负,则将sum的值更改为x,并与max做对比,若比max大则将sum的值

揭露动态规划真面目——算法第三章上机实践报告

算法第三章上机实践报告 一.        实践题目 7-2 最大子段和 (40 分) 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值.当所给的整数均为负数时,定义子段和为0. 要求算法的时间复杂度为O(n). 输入格式: 输入有两行: 第一行是n值(1<=n<=10000): 第二行是n个整数. 输出格式: 输出最大子段和. 输入样例: 在这里给出一组输入.例如: 6 -2 11 -4 13 -5

算法第三章上机实践报告——动态规划

1.实践题目 7-1 数字三角形 (30 分) 给定一个由 n行数字组成的数字三角形如下图所示.试设计一个算法,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大. 输入格式: 输入有n+1行: 第 1 行是数字三角形的行数 n,1<=n<=100. 接下来 n行是数字三角形各行中的数字.所有数字在0..99 之间. 输出格式: 输出最大路径的值. 输入样例: 在这里给出一组输入.例如: 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6

算法第三章上机实践

1.实践题目 最大子段和 2.问题描述 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的子段和的最大值.当所给的整数均为负数时,定义子段和为0. 要求算法的时间复杂度为O(n). 输入格式: 输入有两行: 第一行是n值(1<=n<=10000): 第二行是n个整数. 输出格式: 输出最大子段和. 3.算法描述 int maxsum(int a[],int n) { int sum=0,k=0; for(int i=

算法第三章上机实践报告

实践题目 7-1 数字三角形 (30 分) 给定一个由 n行数字组成的数字三角形如下图所示.试设计一个算法,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大. 输入格式: 输入有n+1行: 第 1 行是数字三角形的行数 n,1<=n<=100. 接下来 n行是数字三角形各行中的数字.所有数字在0..99 之间. 输出格式: 输出最大路径的值. 输入样例: 在这里给出一组输入.例如: 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5

算法第四章上机实验报告

题目:删数问题 问题描述:输入一个正整数a和一个正整数k(k≤n ),在n位正整数a中去掉其中任意k个数字后,剩下的数字按原次序排列组成一个新 的正整数. 算法描述:从前往后进行比较,删掉升序的最后那个数,若一直保持升序,则删掉最后一位数,重复k次,删掉k个数 时间复杂度:该算法主要进行了k次的for循环,每次循环的时间复杂度是o(n),故其时间复杂度为o(n) 空间复杂度:该算法不需要额外的数组或变量来存放数据,故其空间复杂度为o(1) 心得体会:在做题的时候还要再细心一点,特别对于一些小细节

算法第三章上机实践报告之数字三角形

1.实践题目 7-1 数字三角形 (30 分) 给定一个由 n行数字组成的数字三角形如下图所示.试设计一个算法,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大. 输入格式: 输入有n+1行: 第 1 行是数字三角形的行数 n,1<=n<=100. 接下来 n行是数字三角形各行中的数字.所有数字在0..99 之间. 输出格式: 输出最大路径的值. 输入样例: 在这里给出一组输入.例如: 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6

贪心算法?我全都要!——算法第四章上机实践报告

算法第四章上机实践报告 一.        实践题目 4-1 程序存储问题 (90 分) 设有n 个程序{1,2,…, n }要存放在长度为L的磁带上.程序i存放在磁带上的长度是 li,1≤i≤n. 程序存储问题要求确定这n 个程序在磁带上的一个存储方案, 使得能够在磁带上存储尽可能多的程序. 对于给定的n个程序存放在磁带上的长度,计算磁带上最多可以存储的程序数. 输入格式: 第一行是2 个正整数,分别表示文件个数n和磁带的长度L.接下来的1行中,有n个正整数,表示程序存放在磁带上的长度. 输出

『嗨威说』算法设计与分析 - PTA 数字三角形 / 最大子段和 / 编辑距离问题(第三章上机实践报告)

本文索引目录: 一.PTA实验报告题1 : 数字三角形 1.1 实践题目 1.2 问题描述 1.3 算法描述 1.4 算法时间及空间复杂度分析 二.PTA实验报告题2 : 最大子段和 2.1 实践题目 2.2 问题描述 2.3 算法描述 2.4 算法时间及空间复杂度分析 三.PTA实验报告题3 : 编辑距离问题 3.1 实践题目 3.2 问题描述 3.3 算法描述 3.4 算法时间及空间复杂度分析 四.实验心得体会(实践收获及疑惑) 一.PTA实验报告题1 : 数字三角形 1.1 实践题目: 1