欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

【递推DP】POJ1163The Triangle

发布时间:2025/5/22 编程问答 205 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【递推DP】POJ1163The Triangle 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

题目链接:http://poj.org/problem?id=1163

事实上这个题目有非常多解法,可是我们能够看下这个用一位数组的高效动规解法,这个我上课时老师讲的,非常不错。

先保存最后一行4 5 2 6 5,然后更新最大值7=max(4,5)+2;依次类推,非常显然,我们就能够得到状态转移方程:dp[j]=max(dp[j],dp[j+1])+a[i][j];

这样这个题目就非常好攻克了;

#include<iostream> #include<string> #include<cstdio> #include<cstring> #include<queue> #include<map> #include<stack> #include<set> #include<vector> #include<algorithm> #define LL long long using namespace std; int a[102][102]; int n; int dp[102]; int main() {while(~scanf("%d",&n)){for(int i=1;i<=n;i++){for(int j=1;j<=i;j++){scanf("%d",&a[i][j]);}}for(int i=1;i<=n;i++) dp[i]=a[n][i]; // 将最后一行保存;for(int i=n-1;i>0;i--){for(int j=1;j<=i;j++){dp[j]=max(dp[j],dp[j+1])+a[i][j]; // 更新数据;}}printf("%d\n",dp[1]);}return 0; }


 

转载于:https://www.cnblogs.com/gavanwanggw/p/6929629.html

总结

以上是生活随笔为你收集整理的【递推DP】POJ1163The Triangle的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。