标签:
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
(Figure 1)
Input
Output
Sample Input
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
Sample Output
30
单纯的递归, 但是会超时
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 110
#define max(a,b) (a>b?a:b)
int a[N][N];
int DFS(int x, int y, int n)
{
if(x>n || y>n)
return 0;
if(x==n && y==n)
return a[x][y];
return a[x][y]+ max(DFS(x+1,y, n), DFS(x+1, y+1, n));
}
int main()
{
int n;
while(scanf("%d", &n)!=EOF)
{
int i, j;
memset(a, 0, sizeof(a));
for(i=1; i<=n; i++)
for(j=1; j<=i; j++)
scanf("%d", &a[i][j]);
printf("%d\n", DFS(1,1,n));
}
return 0;
}
用上记忆化搜索后, 不会超时了
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 110
#define max(a,b) (a>b?a:b)
int a[N][N], dp[N][N];
int DFS(int x, int y, int n)
{
if(x>n || y>n)
return 0;
if(dp[x][y]!=-1)
return dp[x][y];
else
{
if(x==n && y==n)
return a[x][y];
dp[x+1][y] = DFS(x+1, y, n);
dp[x+1][y+1] = DFS(x+1, y+1, n);
return a[x][y]+ max(dp[x+1][y], dp[x+1][y+1]);
}
}
int main()
{
int n;
while(scanf("%d", &n)!=EOF)
{
int i, j;
memset(a, 0, sizeof(a));
memset(dp, -1, sizeof(dp));
for(i=1; i<=n; i++)
for(j=1; j<=i; j++)
scanf("%d", &a[i][j]);
printf("%d\n", DFS(1, 1, n));
}
return 0;
}
(记忆化搜索 )The Triangle--hdu --1163
标签:
原文地址:http://www.cnblogs.com/YY56/p/5038431.html