USACO/Number Triangles

USACO/Number Triangles

Posted by dym on February 15, 2014

本文迁移自老博客,原始链接为 https://seven.blog.ustc.edu.cn/usaconumber-triangles/

数字金字塔,写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。 解法:最直接的动态规划

#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;

int r;
int foo[1001][1001];
int ans[1001][1001];
int main()
{
  ofstream fout ("numtri.out");
  ifstream fin ("numtri.in");
  fin>>r;
  for(int i = 0; i < r; i++)
	for(int j = 0; j < i + 1 ; j++){
	  fin>>foo[i][j];
	}
  for(int i = r - 1 ; i >= 0 ; i-- )
	for(int j = 0; j < i + 1 ; j++){
	  if(i == (r - 1)){
		ans[i][j] = foo[i][j];
	  }
	  else{
		ans[i][j] = max(ans[i + 1][j] , ans[i + 1][j + 1]) + foo[i][j];
	   }
	}
  fout<<ans[0][0]<<endl;
  return 0;
}