POJ 1163 The Triangle 简单DP
看题传送门门:http://poj.org/problem?id=1163
困死了。。。。QAQ
普通做法,从下往上,可得状态转移方程为:
dp[i][j]= a[i][j] + max (dp[i+1][j] , dp[i+1][j+1] );
#include<cstdio>
#include<cstring>
int a[101][101];
int dp[101][101]; int main()
{
int n;
while(~scanf("%d",&n))
{
memset(a,0,sizeof(a));
memset(dp,0,sizeof(dp)); 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[n][i]=a[n][i]; for(int i=n-1;i>=1;i--)
{
for(int j=1;j<=i;j++)
dp[i][j]= a[i][j] + (dp[i+1][j] > dp[i+1][j+1]? dp[i+1][j]:dp[i+1][j+1]);
} printf("%d\n",dp[1][1]);
}
}
记忆化搜索,本题数据量小,与上面的都是0ms,但记忆化搜索保证每个子结点只访问一次,速度应该更快。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[101][101];
int dp[101][101];
int n;
int d(int i,int j)
{
if(dp[i][j]>=0)
return dp[i][j]; return dp[i][j]= a[i][j] + (i==n ? 0: max ( d(i+1,j) ,d(i+1,j+1)));
} int main()
{
while(~scanf("%d",&n))
{
memset(a,0,sizeof(a));
memset(dp,-1,sizeof(dp)); for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
scanf("%d",&a[i][j]); d(1,1); printf("%d\n",dp[1][1]);
}
}
尝试使用宏定义让程序变得简洁而优雅
#include<cstdio>
#include<cstring>
#define F(i,n) for(int i=1;i<=n;i++)
int a[101][101];
int dp[101][101];
int n; int main()
{
while(~scanf("%d",&n))
{
memset(a,0,sizeof(a));
memset(dp,-1,sizeof(dp)); F(i,n)
F(j,i)
scanf("%d",&a[i][j]); F(i,n)
dp[n][i]=a[n][i]; for(int i=n-1;i>=1;i--)
{
F(j,i)
dp[i][j]= a[i][j]+ (dp[i+1][j] > dp[i+1][j+1]? dp[i+1][j]:dp[i+1][j+1]);
} printf("%d\n",dp[1][1]);
}
}
POJ 1163 The Triangle 简单DP的更多相关文章
- POJ 1163 The Triangle(简单动态规划)
http://poj.org/problem?id=1163 The Triangle Time Limit: 1000MS Memory Limit: 10000K Total Submissi ...
- POJ 1163 The Triangle【dp+杨辉三角加强版(递归)】
The Triangle Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 49955 Accepted: 30177 De ...
- poj 1163 The Triangle &poj 3176 Cow Bowling (dp)
id=1163">链接:poj 1163 题意:输入一个n层的三角形.第i层有i个数,求从第1层到第n层的全部路线中.权值之和最大的路线. 规定:第i层的某个数仅仅能连线走到第i+1层 ...
- poj 1157 LITTLE SHOP_简单dp
题意:给你n种花,m个盆,花盆是有顺序的,每种花只能插一个花盘i,下一种花的只能插i<j的花盘,现在给出价值,求最大价值 简单dp #include <iostream> #incl ...
- poj 1163 The Triangle(dp)
The Triangle Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 43993 Accepted: 26553 De ...
- 递推DP POJ 1163 The Triangle
题目传送门 题意:找一条从顶部到底部的一条路径,往左下或右下走,使得经过的数字和最大. 分析:递推的经典题目,自底向上递推.当状态保存在a[n][j]时可省去dp数组,空间可优化. 代码1: /*** ...
- POJ 1163 The Triangle DP题解
寻找路径,动态规划法题解. 本题和Leetcode的triangle题目几乎相同一样的,本题要求的是找到最大路径和. 逆向思维.从底往上查找起就能够了. 由于从上往下能够扩展到非常多路径.而从下往上个 ...
- OpenJudge/Poj 1163 The Triangle
1.链接地址: http://bailian.openjudge.cn/practice/1163 http://poj.org/problem?id=1163 2.题目: 总时间限制: 1000ms ...
- POJ 3181 Dollar Dayz 简单DP
这DP虽然简单 但是思考一下还是挺好的 题意是 1,2,3,4....k 用加法凑成N 每个数可取不限个数 令dp[i][j] 表示前i种数凑成j的方案数 然后dp[i][j] = dp[i - 1] ...
随机推荐
- 使用Java语言开发微信公众平台(六)——获取access_token
在前四期的文章中,我们分别学习了“环境搭建与开发接入”.“文本消息的接收与响应”.“被关注回复与关键词回复”.“图文消息的发送与响应”等环节.那么,从本篇博文开始,我们将进去更高级的 ...
- Django模型三
关联对象操作及多表查询 关联表的数据操作: 一对多: 正向:如果一个模型有外键字段,通过这个模型对外键进行操作叫做正向. 更新: 通过属性赋值 In [1]: from teacher.models ...
- SpringMVC & Struts2
这两个框架可谓Java中的经典,Java开发必懂的框架,这两天在面试中又问道两者的异同.这里简单做了整理供大家參考交流. 概念:
- Android程序使用SOAP调用远程WebService服务
在现在的应用程序中.不可能不使用到网络,而且后台一定是有server作为支撑的. 现在最常见的调用方式有HTTP的GET .POST方式,返回JSON或者XML数据. 可是也有一种常见的形式就是调用W ...
- 雅黑PHP探针 For PHP7
雅黑PHP探针 For PHP7资料来源: https://kn007.net/topics/yahei-php-probe-for-php7/在v0.4.7版本的基础上,修正了废弃函数及错误语法.使 ...
- 热点共享SS网络
# 测试系统: Ubuntu 16.04 LTS-lxde-ARM # ***-libev 安装脚本源于 秋水逸冰: https://teddysun.com/358.html # ss-tproxy ...
- https://github.com/ 英文库
https://github.com/ https://github.com/sachinchoolur
- 内存泄漏与指针悬挂&野指针介绍
内存泄漏概念:内存泄漏时指动态申请的内存空间没有正常释放,但是也不能继续使用的情况. 例如: char *ch1; ch1 = new char('A'); char = *ch2 = new cha ...
- golang round
func Round(f float64, n int) float64 {pow10_n := math.Pow10(n)return math.Trunc((f+0.5/pow10_n)*pow1 ...
- 趣闻|Python之禅(The Zen of Python)
在Python解释器中输入“import this”会发生什么?如果你不知道这个彩蛋,推荐继续阅读这篇文章. 2001年秋,Foretec(一家会议组织公司)正在准备召开第十届Internationa ...