求助 #3
查看原帖
求助 #3
499427
LY183492761楼主2021/10/5 22:27
#include <stdio.h>
int main(){
	int n;
	int a[20][3],c[20][20],c1[20][20],max1,max2;
	int i,j,num=0;
	scanf("%d",&n);
	while(1){
		scanf("%d%d%d",&a[num][0],&a[num][1],&a[num][2]);
		if(!a[num][0] && !a[num][1] && !a[num][2])
			break;
		num++;
	}
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
			c[i][j]=0;
	for(i=0;i<num;i++)
		c[a[i][0]-1][a[i][1]-1]=a[i][2];
	for(i=n-1;i>=0;i--){
		for(j=n-1;j>=0;j--){
			if(i==n-1 && j==n-1){
				max1=c[n-1][n-1];
				c[i][j]=0;
			} else if(i==n-1){
				c[i][j]=c[i][j]+c[i][j+1];
				if(c[i][j]>max1){
					max1=c[i][j];
					c1[i][j]=0;
				}
			} else if(j==n-1){
				c[i][j]=c[i][j]+c[i+1][j];
				if(c[i][j]>max1){
					max1=c[i][j];
					c1[i][j]=0;
				}
			} else{
				if(c[i][j]+c[i+1][j]>=c[i][j]+c[i][j+1])
					c[i][j]=c[i][j]+c[i+1][j];
				else
					c[i][j]=c[i][j]+c[i][j+1];
				if(c[i][j]>max1){
					max1=c[i][j];
					c1[i][j]=0;;
				}
			}
		}
	}
	for(i=n-1;i>=0;i--){
		for(j=n-1;j>=0;j--){
			if(i==n-1 && j==n-1){
				max2=c1[n-1][n-1];
			} else if(i==n-1){
				c1[i][j]=c1[i][j]+c1[i][j+1];
				if(c1[i][j]>max2)
					max2=c1[i][j];
			} else if(j==n-1){
				c1[i][j]=c1[i][j]+c1[i+1][j];
				if(c1[i][j]>max2)
					max2=c1[i][j];
			} else{
				if(c1[i][j]+c1[i+1][j]>=c1[i][j]+c1[i][j+1])
					c1[i][j]=c1[i][j]+c1[i+1][j];
				else
					c1[i][j]=c1[i][j]+c1[i][j+1];
				if(c1[i][j]>max2)
					max2=c1[i][j];
			}
		}
	}
	printf("%d\n",max1+max2);
	return 0;
}

刚开始学编程的菜鸟一枚,就纯招规律来写的,然后为啥我这样写结果出来的是23,我照着数据数据画了一个数组出来,结果只找到了20和3,还有18和5两种方式。所以,弱弱地问一句,输出数据的25到底是怎么来的啊?

2021/10/5 22:27
加载中...