hdu(poj)-2084(3176)-数塔-简单dp

来源:互联网 发布:php abstract 继承 编辑:程序博客网 时间:2024/05/29 09:08

题目传送门:https://vjudge.net/problem/HDU-2084




好像没什么解释的 ^-^ 


  7

  3   8

  8   1   0

  2   7   4   4

  4   5   2   6   5


核心:dp[j] = mpa[i][j] + max(dp[j], dp[j + 1]);


每次找寻和最大的


dp数组(初始为0):


i=5时

下标-->123     45i=5(4,5)(5,2)(2,6)(6,5)(5,0)

55  6    6    5


依次来推,得到下表


下标-->12345第一轮 i=555665第二轮 i=471210105第三轮 i=3201310105第四轮 i=2232110105第五轮 i=1302110105



完整代码:

#include <algorithm>#include <iostream>#include <cstring>#include <cstdlib>#include <cstdio>#include <cmath>#include <queue>#include <set>#include <map>using namespace std;int mpa[105][105];int dp[105];int main(){    int t;    cin >> t;    while(t--)    {        int n;        cin >> n;        memset(mpa, 0, sizeof(mpa));        memset(dp, 0, sizeof(dp));        for(int i = 1 ; i <= n; i++)            for(int j = 1; j <= i; j++)                cin >> mpa[i][j];        for(int i = n; i >= 1; i--)        {            for(int j = 1; j <= n; j++)                dp[j] = mpa[i][j] + max(dp[j], dp[j + 1]);        }        cout << dp[1] << endl;    }    return 0;}


原创粉丝点击