动态规划:洛谷 P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles

洛谷 P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles

洛谷一个普及-的题,我以前也是用DFS做的,现在用DP+滚动数组,提时间省空间!

 

 

我的题解:

 1 //洛谷 P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 using namespace std;
 6 int dp[1005];
 7 int pre[1005];//存放上一层的数据
 8 int main()
 9 {
10     int n;
11     scanf("%d", &n);
12     int data;
13     for (int i = 1; i <= n; ++i)//输入n层
14     {
15         for (int j = 1; j <= i; ++j)//i层就输入i个元素
16         {
17             scanf("%d", &data);
18             dp[j] = max(pre[j - 1] + data, pre[j] + data);
19             //第一层也没事 反正一开始pre里都是空的
20             //这里用的是滚动数组,节约空间,每一次旧的存在pre中,新的覆盖dp
21         }
22         memcpy(pre, dp, sizeof(dp));//每次把新得到到一层存入pre中
23         //memcpy注意要头文件cstring
24     }
25     int ans = -99999;
26     for (int i = 1; i <= n; ++i)
27     {
28         ans = max(dp[i], ans);
29     }
30     printf("%d", ans);
31     return 0;
32 }

本来想开二维数组,后来发现滚动数组很方便,只需要一个pre存储一下数据,每次用memcpy赋值覆盖一下,十分方便!

 

 

 通过啦~

posted @ 2022-04-03 11:36  朱朱成  阅读(29)  评论(0编辑  收藏  举报