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] ...
随机推荐
- AIX 5.3下创建逻辑卷、添加文件系统并挂载
首先创建逻辑卷smit lv ,这里没多大问题就不细述了. 输入要创建的逻辑卷名.所属卷组.分配多少个LP.创建在哪块磁盘上等,另外还可以设置镜像,默认是只有一份镜像的,即不做mirror. 到此LV ...
- POJ 1061 青蛙的约会 数论水题
http://poj.org/problem?id=1061 傻逼题不多说 (x+km) - (y+kn) = dL 求k 令b = n-m ; a = x - y ; 化成模线性方程一般式 : Lx ...
- ZJOI2005沼泽鳄鱼
矩阵优化dp ** 注意:矩阵乘法没有交换律 ** 思路:类比P2151hh去散步 代码特点在一维的答案矩阵 1.矩阵优化两点间方案数不必赘述 2.注意2,3,4可以办到以他们的lcm为周期,正是因为 ...
- 洛谷 P2108 学英语
P2108 学英语 题目描述 为了适应紧张的大学学习生活,小Z发愤图强开始复习巩固英语. 由于小Z对数学比较有好感,他首先复习了数词.小Z花了一整天的时间,终于把关于基数词的知识都搞懂了.于是小Z非常 ...
- linux host主机名配置
1.查看主机名 #hostname 2.查看ip #ifconfig 2.添加主机名配置 #vi /etc/hosts 新增一行 172.23.26.195 vhost145.idmp.safe
- 最小生成树(MST,minimum spanning tree)
生成树:由图生成的树,由图转化为树,进一步可用对树的相关操作来对图进行操作.最小指的是权值最小: 生成树是边的集合,如下图所示的最小生成树:MST={{a,b},{a,f},{f,c}} 本文主要探讨 ...
- 洛谷P2234 [HNOI2002]营业额统计(01Tire树)
题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是 ...
- android adb常见问题的解决方法!
** adb的常见问题 adb:android debug bridge,用于连接模拟器/手机与PC端软件(比如:eclipse或者xx手机助手) adb devices -> ...
- .net core 分布式性能计数器的实现
1.特别鸣谢张善友老师的指点; 2.分布式性能计数器链接地址:https://mp.weixin.qq.com/s/hPV_bNZD4XmjP0QTE54pWA
- 动态规划例子:Maximal Square
Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and ret ...