[DP]数字金字塔
来源:互联网 发布:android短信群发源码 编辑:程序博客网 时间:2024/04/30 11:55
SSL 1100 1458
洛谷 P1216 [USACO1.5]数字三角形 Number Triangles
题目描述
观察下面的数字金字塔。
写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。
7 3 8 8 1 0
2 7 4 4
4 5 2 6 5
在上面的样例中,从7 到 3 到 8 到 7 到 5 的路径产生了最大
分析
不多讲
//一维顺推#include <iostream>#include <cstdio>int f[1001],a[1001],n,i,j;int main(){ scanf("%d",&n); scanf("%d",&a[1]); f[1]=a[1]; for (i=2;i<=n;i++) { for (j=1;j<=i;j++) scanf("%d",&a[j]); for (j=i;j>=1;j--) { if (a[j]+f[j]>a[j]+f[j-1]) f[j]=a[j]+f[j]; else f[j]=a[j]+f[j-1]; } } j=0; for (i=1;i<=n;i++) if (j<f[i]) j=f[i]; printf("%d\n",j); return (0);}
//逆推法#include <iostream>#include <cstdio>int f[1001][1001],a[1001][1001],n,i,j;int main(){ scanf("%d",&n); for (i=1;i<=n;i++) for (j=1;j<=i;j++) scanf("%d",&a[i][j]); for (i=1;i<=n;i++) f[n][i]=a[n][i]; for (i=n-1;i>=1;i--) for (j=1;j<=i;j++) if (a[i][j]+f[i+1][j]>a[i][j]+f[i+1][j+1]) f[i][j]=a[i][j]+f[i+1][j]; else f[i][j]=a[i][j]+f[i+1][j+1]; printf("%d\n",f[1][1]); return (0);}
//顺推法#include <iostream>#include <cstdio>int f[1001][1001],a[1001][1001],n,i,j;int main(){ scanf("%d",&n); for (i=1;i<=n;i++) for (j=1;j<=i;j++) scanf("%d",&a[i][j]); f[1][1]=a[1][1]; for (i=2;i<=n;i++) for (j=1;j<=i;j++) if (a[i][j]+f[i-1][j]>a[i][j]+f[i-1][j-1]) f[i][j]=a[i][j]+f[i-1][j]; else f[i][j]=a[i][j]+f[i-+1][j-+1]; j=0; for (i=1;i<=n;i++) if (j<f[n][i]) j=f[n][i]; printf("%d\n",j); return (0);}
0 0
- [DP]数字金字塔
- CCF NOI1145 数字金字塔【DP】
- 【USACO TRAINING】数字金字塔(DP)
- 数字金字塔
- 数字金字塔
- 数字金字塔
- 数字金字塔
- 数字金字塔
- 数字金字塔
- 数字金字塔
- 数字金字塔
- 数字金字塔
- 数字金字塔
- 数字金字塔
- 数字金字塔
- USACO 1.5 Number Triangles 数字金字塔(经典dp)
- java数字金字塔(转)
- java数字金字塔(转)
- JpaRepository,JpaSpecificationExecutor
- 12333
- 【BZOJ 2178】圆的面积并 自适应辛普森公式
- 网游实时对战同步技术三篇
- Java Web(三) 会话机制,Cookie和Session详解
- [DP]数字金字塔
- 深入理解Java:自定义注解入门(Annotation)
- 静态路由算法
- linux文件描述符与打开文件的关系
- MFC之多线程
- 剑指offer经典编程(十七)
- 基于Qt_Test的单体测试方法(二)
- python学习记录1
- 使用Spring AOP切面解决数据库读写分离