UVa 10564 DP Paths through the Hourglass
从下往上DP,d(i, j, k)表示第(i, j)个格子走到底和为k的路径条数。
至于字典序最小,DP的时候记录一下路径就好。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; int n, sum;
int a[][];
long long d[][][];
int p[][][][]; int main()
{
while(scanf("%d%d", &n, &sum) == && n)
{
memset(d, , sizeof(d));
memset(p, , sizeof(p));
for(int i = ; i <= n; i++)
for(int j = ; j <= n - i + ; j++) scanf("%d", &a[i][j]);
for(int i = n + ; i < n * ; i++)
for(int j = ; j <= i - n + ; j++) scanf("%d", &a[i][j]); for(int i = ; i <= n; i++)
{
int t = a[n*-][i];
d[n*-][i][t] = ;
} for(int i = n*-; i >= n; i--)
for(int j = ; j <= i - n + ; j++)
for(int k = a[i][j]; k <= sum; k++)
{
int t = k - a[i][j];
if(d[i+][j][t]) { d[i][j][k] += d[i+][j][t]; p[i][j][k][] = ; }
if(d[i+][j+][t]) { d[i][j][k] += d[i+][j+][t]; p[i][j][k][] = ; }
} for(int i = n - ; i >= ; i--)
for(int j = ; j <= n - i + ; j++)
for(int k = a[i][j]; k <= sum; k++)
{
int t = k - a[i][j];
if(d[i+][j-][t]) { d[i][j][k] += d[i+][j-][t]; p[i][j][k][] = ; }
if(d[i+][j][t]) { d[i][j][k] += d[i+][j][t]; p[i][j][k][] = ; }
} long long ans = ;
for(int i = ; i <= n; i++) ans += d[][i][sum];
printf("%lld\n", ans);
if(!ans) { puts(""); continue; } int j, now = sum;
for(int i = ; i <= n; i++) if(d[][i][sum]) { j = i; break; }
printf("%d ", j - ); for(int i = ; i < n * - ; i++)
{
if(p[i][j][now][])
{
printf("L");
now -= a[i][j];
if(i < n) j--;
}
else
{
printf("R");
now -= a[i][j];
if(i >= n) j++;
}
}
puts("");
} return ;
}
代码君
还有一件事想抽自己两巴掌,就是一直困惑我的谜之AC,谜之WA,是因为没关freopen,WTF!
UVa 10564 DP Paths through the Hourglass的更多相关文章
- UVA 10564 十 Paths through the Hourglass
Paths through the Hourglass Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & % ...
- UVA 10564 Paths through the Hourglass[DP 打印]
UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...
- 01背包(类) UVA 10564 Paths through the Hourglass
题目传送门 /* 01背包(类):dp[i][j][k] 表示从(i, j)出发的和为k的方案数,那么cnt = sum (dp[1][i][s]) 状态转移方程:dp[i][j][k] = dp[i ...
- uva 10564
Problem FPaths through the HourglassInput: Standard Input Output: Standard Output Time Limit: 2 Seco ...
- UVA 10564 - Paths through the Hourglass (dp)
本文出自 http://blog.csdn.net/shuangde800 题目传送门 题意: 给一个相上面的图.要求从第一层走到最下面一层,只能往左下或右下走,经过的数字之和为sum. 问有多少 ...
- UVA 10564 Paths through the Hourglass(背包)
为了方便打印路径,考虑从下往上转移.dp[i][j][S]表示在i行j列总和为S的方案, dp[i][j][S] = dp[i+1][left][S-x]+dp[i+1][right][S-x] 方案 ...
- UVA - 10564 Paths through the Hourglass
传送门:https://vjudge.net/problem/UVA-10564 题目大意:给你一张形如沙漏一般的图,每一个格子有一个权值,问你有多少种方案可以从第一行走到最后一行,并且输出起点最靠前 ...
- UVA 10564_ Paths through the Hourglass
题意: 由0-9的数字组成一个形如沙漏的图形,要求从第一行开始沿左下或者右下到达最后一行,问有多少种不同的路径,使最后路径上的整数之和为给定的某个数. 分析: 简单计数dp,从最后一行开始,设dp[i ...
- UVA 10564 计数DP
也是经典的计数DP题,想练练手,故意不写记忆化搜索,改成递推,还是成功了嘞...不过很遗憾一开始WA了,原来是因为判断结束条件写个 n或s为0,应该要一起为0的,搞的我以为自己递推写挫了,又改了一下, ...
随机推荐
- 用户 'IIS APPPOOL\**' 登录失败的解决方案(项目部署到本地IIS上打开网页出现报错)
为开发方便-将项目部署到本地IIS上打开网页出现报错 1.打开IIS管理 2.点击应用池 3.找到你部署的网站名,右键“高级设置”——>“进程模型”——>“标识”修改为localsyste ...
- 第二十章 排查和调试Web程序 之 设计异常处理策略
1. 概述 本章内容包括: 多层架构中的异常处理.使用global.asax 或 自定义的HttpHandler 或 web.config中的属性来显示特定的错误页.处理 first chance 异 ...
- Mysql系列常见面试题(三)
1.Mysql数据表在什么情况下容易损坏? 服务器突然断电导致数据文件损坏,强制关机,没有先关闭Mysql服务等. 2.Mysql有关全校的表都有那几个? Mysql服务器通过权限表老控制用户对数据库 ...
- ABAP跳转屏幕
1.call transaction语句跳转屏幕 '. CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN. . 2.调用函数 CALL FUNCTION 'M ...
- .Net平台互操作技术:03. 技术验证
上面两篇文章分别介绍了.Net平台互操作技术面临的问题,并重点介绍了通过P/Invoke调用Native C++类库的技术实现.光说不做是假把式,本文笔者将设计实验来证明P/Invoke调用技术的可行 ...
- C# 初始学习心情
当听说需要转做.net的时候.内心是忐忑不安的.因为突然从前端转向后端,几乎完全颠倒了...一个注重界面实现功能.一个注重逻辑的开发,然并卵,服从需求吧. 虽说公司需要你转.但是时间是不允许的,所以只 ...
- hadoop的shell总结
ls命令(文件内容) 列出系统跟目录下的目录和文件 Hadoop fs -ls / 列出文件系统所有的目录和文件 Hadoop fs -ls -R / cat命令(列出文档内容) Hadoop fs ...
- SharePoint 2013 安装配置(3-2)
第三部分SQL Server后端配置篇幅较长,上一篇介绍SQL Server 前提条件及安装(3-1),这篇分享SQL Server功能安装配置,请参考以下步骤. 10.在“安装角色”屏幕上,选择“S ...
- 洛谷 P2424 约数和
题目背景 Smart最近沉迷于对约数的研究中. 题目描述 对于一个数X,函数f(X)表示X所有约数的和.例如:f(6)=1+2+3+6=12.对于一个X,Smart可以很快的算出f(X).现在的问题是 ...
- UVALive 3983 Robotruck (单调队列,dp)
如果状态定义为序号和重量的话,决策就是下一个垃圾捡或者不减,但是状态数太多了. 如果只定义序号作为状态的话,决策就变成从前面的某个j一直捡到i才送回垃圾. 这就变成了一个区间选最小值的问题,用单调队列 ...