UVA 10564 - Paths through the Hourglass (dp)
本文出自 http://blog.csdn.net/shuangde800
![](/assets/blank.gif)
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)相关推荐
- UVa在线比赛单题汇总-----DP专题
动态规划基础 例题 LA 3882 UVa 3882 - And Then There Was One 递推------------无力orz UVa 10635 10635 - Prince and ...
- UVA 10564 计数DP
也是经典的计数DP题,想练练手,故意不写记忆化搜索,改成递推,还是成功了嘞...不过很遗憾一开始WA了,原来是因为判断结束条件写个 n或s为0,应该要一起为0的,搞的我以为自己递推写挫了,又改了一下, ...
- uva live 4394 String painter 间隔dp
// uva live 4394 String painter // // 问题是,在培训指导dp运动主题,乍一看,我以为只是一点点复杂 // A A磕磕磕,两个半小时后,.发现超过例子.然而,鉴于他 ...
- 【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 字典 ...
- uva live 4731 Cellular Network 线性dp
// uva live 4731 // // 状态很好想: // d(i,j)表示前i个网络分为j组所得到的数学期望的最小值 // 转移方程: // d(i,j) = min(d(k,j-1)+cos ...
- Uva 11400 - Lighting System Design (DP)
题目链接 https://cn.vjudge.net/problem/UVA-11400 [题意] 你的任务是设计一个照明系统,一共有n(n<=1000)个灯泡可以选择,不同种类的灯必须使用不同 ...
- UVA - 1252 Twenty Questions (状压dp+vis数组加速)
有n个物品,每个物品有m个特征.随机选择一个物品让你去猜,你每次可以询问一个特征的答案,问在采取最优策略时,最坏情况下需要猜的次数是多少. 设siz[S]为满足特征性质集合S的特征的物品总数,dp[S ...
- Codeforces 1205C Palindromic Paths (交互题、DP)
题目链接 http://codeforces.com/contest/1205/problem/C 题解 菜鸡永远做着变巨的梦 然而依然连div1BC题都不会做 要是那天去打cf怕是又要1题滚粗了.. ...
- UVA - 11361 Investigating Div-Sum Property(数位dp/记忆化搜索板子)
题目:https://vjudge.net/problem/UVA-11361 思路:数位dp,用记忆化搜索写,dp[pos][i][j][limit] 代表剩余有pos位,每位上的数字和模k 等于i ...
最新文章
- 技术一般,却被破格提拔!肯定有黑幕......
- 分享codeigniter框架,在zend studio 环境下的代码提示
- Android攻城狮SurfaceView
- qt找不到打印机_Qt无法调起打印机问题(QPrintDialog: Cannot be used on non-native printers)解决...
- Spring Cloud Feign 熔断器支持
- 设计一个安全对外的API接口,需要考虑哪些方面?
- 网络对抗技术实验二,第一部分,第二部分
- 拉普拉斯分布_理解拉普拉斯特征映射中的优化问题的约束条件
- shell基础之EOF的用法
- 苹果分屏软件_Mac软件推荐
- plsqldev1105_x64与instantclient_11_2配置使用
- DDD-领域驱动设计
- Lebesgue可测函数
- web前端培训 - 12个有用的 JavaScript 代码片段
- obs studio_使用OBS Studio实时进行Linux视频编辑
- 【RuoYi-Vue-Plus】学习笔记 42 - Easy Excel(二)Excel 2007(*.xlsx)导入流程分析(源码)
- 手风琴效果(vue实现)
- AcWing 1293. 夏洛克和他的女朋友(思维 欧拉筛 图论)
- JAVA算术右移与无符号右移
- 新数组中的元素是对原数组中的元素升序排列后所得。
热门文章
- springboot线程池使用
- ES启动错误 ERROR: the system property [es.path.conf] must be set
- SpringBoot+Thyemleaf报错Template might not exist or might not be accessible
- div加border样式
- Source Insight3.x注册码
- Tomcat局域网多端口建立多网站
- 正则表达式判断ip格式
- Linux学习笔记:GDB常用命令
- 查询所有的oracle表、表空间、数据库连接等信息
- seL4操作系统基础02:从Hello World开始