The Triangle
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 30728 | Accepted: 18184 |
Description
7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (Figure 1)
Input
Your program is to read from standard input. The first line contains one integer N: the number of rows in the triangle. The following N lines describe the data of the triangle. The number of rows in the triangle is > 1 but <= 100. The numbers in the triangle,
all integers, are between 0 and 99.
Output
Your program is to write to standard output. The highest sum is written as an integer.
Sample Input
5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
Sample Output
30
记忆化搜索,hash数组记录当前最大值
对于3176,挂了,看来还是有问题
#include <iostream> #include <cstring> #include <algorithm> using namespace std; int maps[105][105]; int Hash[105][105]; int n; void DFS(int x, int y) { if(x==n) return; for(int i=0;i<=1;i++) { int p = x + 1; int q = y + i; if(maps[p][q] + Hash[x][y] > Hash[p][q]) { Hash[p][q] = maps[p][q] + Hash[x][y]; DFS(p,q); } } } int main() { freopen("in.txt","r",stdin); cin>>n; memset(Hash,0,sizeof(Hash)); memset(maps,0,sizeof(maps)); for(int i=1;i<=n;i++) { for(int j=1;j<=i;j++) { cin>>maps[i][j]; } } Hash[1][1] = maps[1][1]; DFS(1,1); int sum = -1; for(int i=1;i<=n;i++) { for(int j=1;j<=i;j++) { sum = max(sum,Hash[i][j]); } } cout<<sum<<endl; }