【洛谷】P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles(dp入门)

关键:逆向求解

【洛谷】P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles(dp入门)_第1张图片

若从倒数第二排的‘2’开始走,只有2个选择,往左下方和右下方。

往左下方是‘4’,得到的最终值为6,往右下方是‘5’,得到的最终值是7.这时当然选择右下方。

我们就将‘2’改写成2+5=7。 再次考虑倒数第二排的7,

同理,应选择左下,得到最终值是12。还是将‘7’改写成5+7=12。

【洛谷】P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles(dp入门)_第2张图片

【洛谷】P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles(dp入门)_第3张图片 【洛谷】P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles(dp入门)_第4张图片

以此类推...........

最后得到ACcode:

#include
using namespace std;
const int N=1e3+10;
int n,a[N][N];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=i;j++){
			cin>>a[i][j];
		}
	}
	for(int i=n-1;i>=1;i--){//从下往上推 
		for(int j=1;j<=i;j++){
			a[i][j]=a[i][j]+max(a[i+1][j],a[i+1][j+1]);//**** 
		}
	}
	cout<

你可能感兴趣的:(c++,算法,动态规划)