本文出自   http://blog.csdn.net/shuangde800

题目传送门

题意:
给一个相上面的图。要求从第一层走到最下面一层,只能往左下或右下走,经过的数字之和为sum。
问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径。
思路:

f[i][j][k] 代表从(i,j)点往下走到最后一层和为k的方案数
那么,显然可以得到状态转移:
f[i][j][k] = f[i+1][left][k-val] + f[i+1][right][k-val],  val=(i,j)格上的数字,left是往坐下走的坐标,right往右下走的坐标
代码:
/**==========================================*   This is a solution for ACM/ICPC problem**   @author: shuangde*   @blog: blog.csdn.net/shuangde800*   @email: zengshuangde@gmail.com*===========================================*/#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<queue>
#include<cmath>
#include<cstring>
using namespace std;typedef long long int64;
const int INF = 0x3f3f3f3f;
const double PI  = acos(-1.0);int n, s;
int hourGlass[50][22];
int64 f[50][22][510];void input(){for(int i=1; i<=n; ++i)for(int j=1; j<=n-i+1; ++j) scanf("%d", &hourGlass[i][j]);for(int i=n+1; i<=2*n-1; ++i)for(int j=1; j<=i+1-n; ++j)scanf("%d", &hourGlass[i][j]); }void print_path(int i, int j, int sum){if(i >= 2*n-1) return;int val = hourGlass[i][j];if(i<n){ if(j>1 && f[i+1][j-1][sum-val]){printf("L");print_path(i+1, j-1, sum-val);return ;} printf("R");print_path(i+1, j, sum-val);}else{if(f[i+1][j][sum-val]){printf("L"); print_path(i+1, j, sum-val);return;} printf("R"); print_path(i+1, j+1, sum-val);}
}int main(){while(~scanf("%d%d", &n, &s) && n+s){input();memset(f, 0, sizeof(f));// 初始化最下面一行for(int i=1; i<=n; ++i)f[2*n-1][i][hourGlass[2*n-1][i]] = 1;// 下半部分dpfor(int i=2*n-2; i>=n; --i){for(int j=1; j<=i+1-n; ++j){for(int v=hourGlass[i][j]; v<=s; ++v){int w = hourGlass[i][j];f[i][j][v] = f[i+1][j][v-w] + f[i+1][j+1][v-w]; }} }// 上半部分dpint64 ans = 0;for(int i=n-1; i>=1; --i){for(int j=1; j<=n-i+1; ++j){for(int v=hourGlass[i][j]; v<=s; ++v){int w = hourGlass[i][j];if(j>1) f[i][j][v] += f[i+1][j-1][v-w];if(j<n-i+1) f[i][j][v] += f[i+1][j][v-w];}if(i==1) ans += f[1][j][s];} }cout << ans << endl;for(int i=1; i<=n; ++i){if(f[1][i][s]){printf("%d ", i-1); print_path(1, i, s);break;}}puts("");}return 0;
}

转载于:https://www.cnblogs.com/dyllove98/p/3233781.html

UVA 10564 - Paths through the Hourglass (dp)相关推荐

  1. UVa在线比赛单题汇总-----DP专题

    动态规划基础 例题 LA 3882 UVa 3882 - And Then There Was One 递推------------无力orz UVa 10635 10635 - Prince and ...

  2. UVA 10564 计数DP

    也是经典的计数DP题,想练练手,故意不写记忆化搜索,改成递推,还是成功了嘞...不过很遗憾一开始WA了,原来是因为判断结束条件写个 n或s为0,应该要一起为0的,搞的我以为自己递推写挫了,又改了一下, ...

  3. uva live 4394 String painter 间隔dp

    // uva live 4394 String painter // // 问题是,在培训指导dp运动主题,乍一看,我以为只是一点点复杂 // A A磕磕磕,两个半小时后,.发现超过例子.然而,鉴于他 ...

  4. 【CODE】Unique Paths Word Search (DFS dp 字典树)

    目录 62. Unique Paths 63. Unique Paths II 980. Unique Paths III 79. Word Search 212. Word Search II 字典 ...

  5. uva live 4731 Cellular Network 线性dp

    // uva live 4731 // // 状态很好想: // d(i,j)表示前i个网络分为j组所得到的数学期望的最小值 // 转移方程: // d(i,j) = min(d(k,j-1)+cos ...

  6. Uva 11400 - Lighting System Design (DP)

    题目链接 https://cn.vjudge.net/problem/UVA-11400 [题意] 你的任务是设计一个照明系统,一共有n(n<=1000)个灯泡可以选择,不同种类的灯必须使用不同 ...

  7. UVA - 1252 Twenty Questions (状压dp+vis数组加速)

    有n个物品,每个物品有m个特征.随机选择一个物品让你去猜,你每次可以询问一个特征的答案,问在采取最优策略时,最坏情况下需要猜的次数是多少. 设siz[S]为满足特征性质集合S的特征的物品总数,dp[S ...

  8. Codeforces 1205C Palindromic Paths (交互题、DP)

    题目链接 http://codeforces.com/contest/1205/problem/C 题解 菜鸡永远做着变巨的梦 然而依然连div1BC题都不会做 要是那天去打cf怕是又要1题滚粗了.. ...

  9. UVA - 11361 Investigating Div-Sum Property(数位dp/记忆化搜索板子)

    题目:https://vjudge.net/problem/UVA-11361 思路:数位dp,用记忆化搜索写,dp[pos][i][j][limit] 代表剩余有pos位,每位上的数字和模k 等于i ...

最新文章

  1. 技术一般,却被破格提拔!肯定有黑幕......
  2. 分享codeigniter框架,在zend studio 环境下的代码提示
  3. Android攻城狮SurfaceView
  4. qt找不到打印机_Qt无法调起打印机问题(QPrintDialog: Cannot be used on non-native printers)解决...
  5. Spring Cloud Feign 熔断器支持
  6. 设计一个安全对外的API接口,需要考虑哪些方面?
  7. 网络对抗技术实验二,第一部分,第二部分
  8. 拉普拉斯分布_理解拉普拉斯特征映射中的优化问题的约束条件
  9. shell基础之EOF的用法
  10. 苹果分屏软件_Mac软件推荐
  11. plsqldev1105_x64与instantclient_11_2配置使用
  12. DDD-领域驱动设计
  13. Lebesgue可测函数
  14. web前端培训 - 12个有用的 JavaScript 代码片段
  15. obs studio_使用OBS Studio实时进行Linux视频编辑
  16. 【RuoYi-Vue-Plus】学习笔记 42 - Easy Excel(二)Excel 2007(*.xlsx)导入流程分析(源码)
  17. 手风琴效果(vue实现)
  18. AcWing 1293. 夏洛克和他的女朋友(思维 欧拉筛 图论)
  19. JAVA算术右移与无符号右移
  20. 新数组中的元素是对原数组中的元素升序排列后所得。

热门文章

  1. springboot线程池使用
  2. ES启动错误 ERROR: the system property [es.path.conf] must be set
  3. SpringBoot+Thyemleaf报错Template might not exist or might not be accessible
  4. div加border样式
  5. Source Insight3.x注册码
  6. Tomcat局域网多端口建立多网站
  7. 正则表达式判断ip格式
  8. Linux学习笔记:GDB常用命令
  9. 查询所有的oracle表、表空间、数据库连接等信息
  10. seL4操作系统基础02:从Hello World开始