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] ...
随机推荐
- SQL 金额添加千分位
SELECT CONVERT(NVARCHAR(50),CAST(1000000 AS MONEY),1) SELECT CONVERT(NVARCHAR,CAST(1343432432434.8 A ...
- cksum---检验文件CRC是否正确
- centos6.5 数据库的安装
mongo https://www.cnblogs.com/layezi/p/7290082.html
- hdu 6170
dp: http://blog.csdn.net/qq_28954601/article/details/77484676 #include <bits/stdc++.h> #define ...
- 【例题 8-11 UVA-10954】Add All
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 就是合并果子.. 每次都合并最小的就可以啦. 别忘了初始化 [代码] /* 1.Shoud it use long long ? 2 ...
- 【Uva 10163】Storage Keepers
[Link]: [Description] 你有n(n≤100)个相同的仓库.有m(m≤30)个人应聘守卫,第i个应聘者的能力值 为Pi(1≤Pi≤1000).每个仓库只能有一个守卫,但一个守卫可以看 ...
- spring之AOP(转)
Spring之AOP篇: AOP框架是Spring的一个重要组成部分.但是Spring IOC 并不依赖于AOP,这就意味着你有权力选择是否使用AOP,AOP作为Spring IOC容器的一个补充,使 ...
- 设计模式(7)-结构型模式-Bridge模式
2.结构性模式 2.2 BRIDGE模式 别名:handle/body 这个模式体现了组合相对于继承的优势. 2.2.1动机 当一个抽象可能有多个实现时,通经常使用继承来协调它们.抽象类定义对该抽象 ...
- Android学习笔记之详细讲解画圆角图片
package xiaosi.RoundConcer; import android.app.Activity; import android.graphics.Bitmap; import andr ...
- 78.pipe多管道云端,客户端通信
压力测试截图: 云端 定义管道缓存区大小,最多连接数量(线程个数),当前线程个数,管道名字 //缓冲区大小 #define SIZE 4096 //最多连接数量 #define MAX_CONNECT ...