HDOJ 2084 数塔问题

来源:互联网 发布:毕业设计node.js 编辑:程序博客网 时间:2024/05/19 18:47

自底向上求解。状态转移方程是dp[i][j] = max(dp[i+1][j],dp[i+1][j+1]) + a[i][j].

一开始一直WA,后来把数组最大下标值从100改成101就AC了。

#include <iostream>#include <fstream>using namespace std;int findMax(int a , int b){return a >= b ?a:b;}int main(){//ifstream cin("input.txt");int testNum,n;int dp[101][101],a[101][101];cin>>testNum;while (testNum--){cin>>n;for(int i = 1 ; i <= n ; i++){for(int j = 1 ; j <= i ; j++)cin>>a[i][j];}/*for(int i = 1 ; i <= n ; i++){for(int j = 1 ; j <= i ; j++)cout<<a[i][j]<<" ";cout<<endl;}*/for (int i = 1 ; i<=n;i++)dp[n][i] = a[n][i];for(int i = n-1 ; i >= 1 ; i--){for (int j = 1 ; j <= i ; j++){dp[i][j] = findMax(dp[i+1][j],dp[i+1][j+1]) + a[i][j];}}/*for(int i = 1 ; i <= n ; i++){for(int j = 1 ; j <= i ; j++)cout<<dp[i][j]<<" ";cout<<endl;}*/cout<<dp[1][1]<<endl;}return 0;}


原创粉丝点击