算法第三章上机实验

算法第三章上机实验

数字三角形

给定一个由 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]);

猜你喜欢

转载自www.cnblogs.com/yucuiwencookies/p/9940426.html