HDU 2084 数塔(dp)
来源:互联网 发布:mac 打开uvz 编辑:程序博客网 时间:2024/06/16 05:11
http://acm.hdu.edu.cn/showproblem.php?pid=2084
动态规划的简单问题 从下向上依次找到最优解
递推代码:
#include<stdio.h> int map[110][110]; int ans[110][110]; int max(int a,int b){ if (a>b) return a; else return b; } int main (){ int T; scanf("%d",&T); while (T--){ int n; scanf ("%d",&n); for (int i=1;i<=n;i++){ for (int j=1;j<=i;j++){ scanf ("%d",&map[i][j]); } } for (int i=1;i<=n;i++){ ans[n][i]=map[n][i]; } for (int i=n-1;i>=1;i--){ for (int j=1;j<=i;j++){ ans[i][j]=map[i][j]+max(ans[i+1][j],ans[i+1][j+1]); //状态转移方程 } } printf ("%d\n",ans[1][1]); } return 0; }
记忆化搜索代码:
#include <stdio.h> #include <string.h> int map[110][110]; int ans[110][110]; int n; int max(int a,int b){ if (a>b) return a; else return b; } int solve(int i,int j){ if (ans[i][j]>=0) return ans[i][j]; return ans[i][j]=map[i][j]+(i==n ? 0:max(solve(i+1,j),solve(i+1,j+1))); } int main (){ int T; scanf("%d",&T); while (T--){ scanf ("%d",&n); for (int i=1;i<=n;i++){ for (int j=1;j<=i;j++){ scanf ("%d",&map[i][j]); } } memset(ans,-1,sizeof(ans)); solve(1,1); printf ("%d\n",ans[1][1]); } return 0; }
动态规划的简单问题 从下向上依次找到最优解
0 0
- hdu 2084 数塔(DP水)
- hdu 2084 数塔(dp ,水)
- HDU 2084 数塔(DP)
- hdu 2084 数塔(水题,dp)
- HDU -- 2084 数塔(简单DP)
- HDU - 2084 数塔(dp入门)
- HDU 2084 数塔 (经典dp)
- hdu 2084 数塔(DP)
- hdu 2084 数塔(dp)
- HDU 2084 数塔(DP)
- HDU 2084 数塔(经典dp)
- hdu 2084 数塔 <dp(模板)>
- 【HDU 2084】数塔(dp)
- 【HDU】-2084-数塔(简单DP)
- (简单DP)HDU 2084 数塔
- HDU 2084 数塔(基础dp)
- HDU 2084 数塔(dp)
- HDU 2084 数塔 (dp)
- 动态规划详解
- 点滴学习Linux----Linux常用命令
- linux常用命令
- 运算符
- Axure初学使用心得
- HDU 2084 数塔(dp)
- 《算法导论》课后题--4--第三章
- 常见图片格式解析
- LIGHT OJ 1010 Knights in Chessboard
- 微信小程序传值以及获取值方法
- 使用add_header()添加报头
- kernel 中WiFi模块报错:device not accepting address .error -71
- 在Ubuntu 16.04下安装 virtualbox 5.0/5.1
- HDU 2602 Bone Collector(dp)