1 条题解

  • 0
    @ 2023-6-11 12:17:07

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    
    //记录数塔及数塔的计算结果 
    int a[110][110];
    int r[10000][2];//记录路径 
    
    int main(){
    	int i,j,k,n;
    	cin>>n;
    	//读入数塔
    	for(i = 1;i <= n;i++){
    		for(j = 1;j <= i;j++){
    			cin>>a[i][j];
    		}
    	} 
    	
    	//从倒数第二层开始计算
    	for(i = n - 1;i >= 1;i--){
    		for(j = 1;j <= i;j++){
    			//下方和右侧看哪个数更大 
    			a[i][j] += max(a[i+1][j],a[i+1][j+1]);
    		}
    	}
    	
    
    	//根据计算结果存路线 
    	r[1][1] = 1;
    	r[1][2] = 1;
    	k = 2;
    	 
    	int x = 1,y = 1;//记录路径
    	//一直算到第n行 
    	while(x != n){
    		if(a[x+1][y] > a[x+1][y+1]){
    			r[k][1] = x + 1;
    			r[k][2] = y;
    			
    			x++;
    		}else{
    			r[k][1] = x + 1;
    			r[k][2] = y + 1;
    			
    			x++;y++;
    		}
    		
    		k++;//下标自增 
    	} 
    	
    	//输出结果
    	for(i = k-1;i >= 1;i--){
    		if(i != 1){
    			cout<<r[i][1]<<","<<r[i][2]<<"->";
    		}else{
    			cout<<r[i][1]<<","<<r[i][2]<<endl;
    		} 
    	} 
    	
    	cout<<a[1][1]<<endl;
        return 0;
    }
    
    
    • 1

    信息

    ID
    2330
    时间
    1000ms
    内存
    64MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者