从下往上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的更多相关文章

  1. UVA 10564 十 Paths through the Hourglass

     Paths through the Hourglass Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & % ...

  2. UVA 10564 Paths through the Hourglass[DP 打印]

    UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...

  3. 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 ...

  4. uva 10564

    Problem FPaths through the HourglassInput: Standard Input Output: Standard Output Time Limit: 2 Seco ...

  5. UVA 10564 - Paths through the Hourglass (dp)

    本文出自   http://blog.csdn.net/shuangde800 题目传送门 题意: 给一个相上面的图.要求从第一层走到最下面一层,只能往左下或右下走,经过的数字之和为sum. 问有多少 ...

  6. 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] 方案 ...

  7. UVA - 10564 Paths through the Hourglass

    传送门:https://vjudge.net/problem/UVA-10564 题目大意:给你一张形如沙漏一般的图,每一个格子有一个权值,问你有多少种方案可以从第一行走到最后一行,并且输出起点最靠前 ...

  8. UVA 10564_ Paths through the Hourglass

    题意: 由0-9的数字组成一个形如沙漏的图形,要求从第一行开始沿左下或者右下到达最后一行,问有多少种不同的路径,使最后路径上的整数之和为给定的某个数. 分析: 简单计数dp,从最后一行开始,设dp[i ...

  9. UVA 10564 计数DP

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

随机推荐

  1. P3818 小A和uim之大逃离 II

    题目背景 话说上回……还是参见 https://www.luogu.org/problem/show?pid=1373 吧 小a和uim再次来到雨林中探险.突然一阵南风吹来,一片乌云从南部天边急涌过来 ...

  2. I/O流操做总结(三)

    说实话,其实我并不是很喜欢Java这门语言,尽管它很强大,有很多现成的API可以调用 但我总感觉它把简单的事情弄得太过复杂,甚至有时候会让人迷失 弄不清到底是为了写出东西,还是为了语言本身 我学习的第 ...

  3. 【Unity3D】点击交互——简单工厂

    实现一个很简单的点击小游戏,学习交互相关的内容,在不实时创建销毁的情况下,使用简单工厂创建.管理.回收.复用标记. 游戏概述:点击出现标记,两秒内自动消失 游戏展示: 1.1实现点击效果. 1.1.1 ...

  4. EF6 CodeFirst连接MySql 报nvarchar('max')错误解决办法

    1.在DBContext类加标签[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))] 2.在Nuget控制台输入u ...

  5. django之分页插件

    from django.utils.safestring import mark_safe class Page: def __init__(self, current_page, data_coun ...

  6. Windows系统命令行下编译连接C/C++源代码方法

    Windows系统下编译连接源代码方法:cl -GX test.c-GX: 启动同步异常处理上面的命令会产生可执行程序:test.exe在命令行中直接输入:test.exe 就可运行该程序 Tips: ...

  7. python爬虫之路——初识数据库存储

    非关系型数据库:MongoDB.关系型数据库:MySQL 关系型和非关系型的区别: 安装: 使用: 应用场景: mongoDB是一种非关系型数据库,分为四大类:键值存储数据库,列存储数据库,文档型数据 ...

  8. Codeforces Round #321 (Div. 2) E Kefa and Watch (线段树维护Hash)

    E. Kefa and Watch time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  9. CPP-STL:vector中的size和capacity

    在vector中与size()和capacity() 相对应的有两个函数: resize(size_type)和reserve(size_type). Size指目前容器中实际有多少元素,对应的res ...

  10. Unity调用Windows窗口句柄,选择文件和目录

    T:2019-6-25 10:06:59 C:Scatt Kang using System; using System.Collections; using System.Collections.G ...