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;
    }



  • 相关阅读:
    Flex从页面(*.swf)url获取参数
    Flex 国际化
    Flex自定义事件二
    Flex中为各种控件绑定远程XML数据
    arp spoofing on linux
    java定位内存泄漏点
    Drools 简单应用实例2
    制作back track linux usb启动盘
    xss漏洞学习
    nmap在实战中的高级应用
  • 原文地址:https://www.cnblogs.com/sjw1357/p/3863987.html
Copyright © 2011-2022 走看看