链接:Problem - 2084 (hdu.edu.cn)
问题分析:
自顶向下的分析,自底向上的计算。
从倒数第二层看,2可以选19和7,选择最大的就是21,同理可得18选10得28,9选10得19,5选16得21,依次类推。
代码实现:
#include <iostream>
#include <algorithm>
using namespace std;
int dp[200][200];
int main(){
int m;
cin>>m;
while(m--){
int n;
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
cin>>dp[i][j];
for(int i=n-1;i>0;i--)
for(int j=1;j<=i;j++){
if(dp[i][j]+dp[i+1][j]>dp[i][j]+dp[i+1][j+1])
dp[i][j]=dp[i][j]+dp[i+1][j];
else
dp[i][j]=dp[i][j]+dp[i+1][j+1];
}
cout<<dp[1][1]<<endl;
}
return 0;
}
总结分析:
第一次出现 Runtime Error (ACCESS_VIOLATION)得报错,查看代码是定义的数组大小就是100,要多开一点。