首页 > 编程语言 > 详细

算法第三章上机实验

时间:2018-11-10 20:46:36      阅读:128      评论:0      收藏:0      [点我收藏+]

算法第三章上机实验

数字三角形

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!