算法第三章上机实验
Posted yucuiwencookies
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法第三章上机实验相关的知识,希望对你有一定的参考价值。
算法第三章上机实验
数字三角形
给定一个由 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]);
}
以上是关于算法第三章上机实验的主要内容,如果未能解决你的问题,请参考以下文章