zoukankan      html  css  js  c++  java
  • 数塔问题

    #include<iostream>
    #include<stdlib.h>
    using namespace std;
    
    int m;
    
    int max(int,int);
    
    void dqta(int **data,int **d);//寻找最优值
    
    void fpath(int **data,int **d,int *path);//寻找最优路径
    
    
    int max(int x,int y){
        if(x>y)return x;
        else return y;
    }
    
    void dqta(int **data,int **d){
    
        int i,j;
    
    	for(j=0;j<m;j++)
                d[m-1][j]=data[m-1][j];
    
        for(i=m-2;i>=0;i--)
            for(j=0;j<=i;j++)
                d[i][j]=max(d[i+1][j],d[i+1][j+1])+data[i][j];
    }
    
    void fpath(int **data,int **d,int *path)
    {
        int i,j,b;
        path[0]=data[0][0];
        j=0;
        for(i=1;i<m;i++)
        {
            b=d[i-1][j]-data[i-1][j];
            if(b==d[i][j])
            {
                path[i]=data[i][j];
            }
            else
            {
                path[i]=data[i][j+1];
                j++;
            }
        }
    }
    
    
    int main(){
    	
        int i,j;
    	cin>>m;
    
    	//创建动态数组;
        int **data=(int **)malloc(sizeof(int *)*m);
    	for(i=0;i<m;i++)
            data[i]=(int *)malloc(sizeof(int)*m);
       
    	int **d=(int **)malloc(sizeof(int *)*m);
    	for(i=0;i<m;i++)
            d[i]=(int *)malloc(sizeof(int)*m);
    
        int *path=(int *)malloc(sizeof(int)*m);
       
    	//读取文件中的数据;
        for(i=0;i<m;i++)
            for(j=0;j<=i;j++)
                cin>>data[i][j];
        dqta(data,d);
    
        printf("最大值为:%d
    ",d[0][0]);
    
        fpath(data,d,path);
    
        printf("最终路径为:
    ");
    
        for(i=0;i<m;i++)
            printf("%d
    ",path[i]);
    
    	return 0;
    }
    /*
    5
    13 11 8 40 7 26 6 14 15 8 12 7 13 24 11
    */

    给个代码简练点的

    #include<stdio.h>
    #include<stdlib.h>
    #define N 5
    main(){
    	int i,j;
    	int data[N][N] = {
    			{9,0,0,0,0},
    			{12,15,0,0,0},
    			{10,6,8,0,0},
    			{2,18,9,5,0},
    			{19,7,10,4,16}
    		};
    		for(i = N-1; i > 0; i--)
    			for(j = 0; j < i; j++)
    				data[i-1][j] += data[i][j] > data[i][j+1] ? data[i][j] : data[i][j+1];
    		
    		printf("%d",data[0][0]);
    		
    		return EXIT_SUCCESS;
    }



  • 相关阅读:
    get started with laravel
    redis消息队列
    javascript模板引擎Mustache
    YIi 权限管理和基于角色的访问控制
    Yii CDbCriteria
    C++ 推断进程是否存在
    IE浏览器开启对JavaScript脚本的支持
    最小公约数(欧几里得算法&amp;&amp;stein算法)
    Nyoj 43 24 Point game 【DFS】
    【蓝桥杯】PREV-5 错误票据
  • 原文地址:https://www.cnblogs.com/sjw1357/p/3863987.html
Copyright © 2011-2022 走看看