数塔的数学问题,什么叫塔板数
标题里有几个塔,如下图。要求从上到下走。如果每一步只能走到相邻的节点,经过的节点的个数的最大和是多少?并输出最大和的路径。
输入数据首先包括一个整数C,它表示测试用例的数量。每个测试用例的第一行是整数N(1=N=100),表示塔的高度。接下来用N行数字表示塔,其中第I行有I个整数,所有整数都在区间[0,99]内。
对于每个测试用例,输出两行。
第1行:输入最大总和。
第二行:如果最大和的路径是惟一的,则输出它的路径(详细格式见示例输出),否则,输出“有几个解!”
样本输入2
五
七
3 8
8 1 0
2 7 4 4
4 5 2 6 5
三
一个
1 1
1 1 1
样本输出30
(0, 0) - (1, 0) - (2, 0) - (3, 1) - (4, 1)
三
有几种解决方法!
提示不要用cin和cout,不然会超时( _ )
代码# includechstdio
#包括cstring
#包含算法
使用命名空间std
int main()
{
int a[101][101],d[101][101],map[101][101];
int n,m;
while(~scanf(%d ,n))
{
while(n -)
{
memset(map,0,sizeof(map));
scanf(%d ,m);
for(int I=0;我是m;我)
for(int j=0;j I 1;j)
{
scanf(%d ,d[I][j]);
a[I][j]=d[I][j];
}
for(int I=m-2;I=0;我-)
for(int j=0;j=I;j)
a[i][j]=max(a[i 1][j],a[I 1][j 1]);
printf(%d\n ,a[0][0]);
int i=0,j=0,c=0;
而(j m-1 i m-1)
{
if((a[I][j]-d[I][j])==a[I 1][j](a[I][j]-d[I][j])==a[I 1][j 1])
{
c=1;
打破;
}
其他
{
if(a[I 1][j]a[I 1][j 1])j;
}
我;
map[I][j]=1;
}
if(c) printf(有几种解决方案!\ n’);
其他
{
printf((0,0));
j=0;
for(int I=1;我是m;我)
{
if(map[i][j]==1) printf( - (%d,%d),I,j);
else printf( - (%d,%d),I,j);
}
printf( \ n );
}
}
}
返回0;
}
转载请联系作者取得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。