题目链接
https://vjudge.net/problem/HihoCoder-1037
题意描述:
有一个n层的迷宫,这个迷宫的第i层有i个房间,从第i层的编号为j的房间出发会有两条路,一条通向第i+1层的编号为j的房间,另一条会通向第i+1层的编号为j+1的房间,而最后一层的所有房间都只有一条离开迷宫的道路。这样的道路都是单向的,现在已知每个房间内得奖券值,现在问你怎样去走才能得到最多的奖券。
解题方法:
按照那个规则层层遍历,找出每一层的最优解,一直遍历到第n层,然后在第n层中找出那个最大值,就是答案。
#include<stdio.h>
#include<string.h>
int max(int a,int b)
{
if(a>b)
return a;
return b;
}
int e[105][105];
int main()
{
int i,j,n,max1;
while(~scanf("%d",&n)){
memset(e,0,sizeof(e));
for(i=1;i<=n;i++){
for(j=1;j<=i;j++)
scanf("%d",&e[i][j]);
}
e[2][1]+=e[1][1];
e[2][2]+=e[1][1];
for(i=3;i<=n;i++){
for(j=1;j<=i;j++){
if(j==1)
e[i][j]+=e[i-1][j];
else if(j==i)
e[i][j]+=e[i-1][j-1];
else
e[i][j]+=max(e[i-1][j],e[i-1][j-1]);
}
}
max1=1;
for(j=1;j<=n;j++)
max1=max(e[n][j],max1);
printf("%d\n",max1);
}
return 0;
}