从下往上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. JAVA基础之转换流和缓冲流

    个人理解: 在理解的字符流和字节流的区别后.要是想读取指定的编码格式的文件时,特别是不是默认的格式时,就需要转换流了,需要注意的是字符流是需要清除缓冲区的:当需要快速的进行读取时,则需要缓冲流.存在即 ...

  2. Kendo UI 单页面应用(三) View

    Kendo UI 单页面应用(三) View view 为屏幕上某个可视部分,可以处理用户事件. View 可以通过 HTML 创建或是通过 script 元素.缺省情况下 View 将其所包含的内容 ...

  3. 用户登录保存数据实例(慕课笔记 使用SharedPreferences保存用户名)

    学习视频之后自己操作时的笔记. 0.视频地址:http://www.imooc.com/video/3265 1.功能预览: 说明:1)输入错误用户名和密码,点击登录,弹出提示框“禁止登录”: 2)输 ...

  4. Easy UI 关联表的字段展示

    刚接触的easy UI ,发现展示关联表的字段的时候,卡住了 好一段时间,后来通过qq群询问,终于得到答案 实体Record public class Record:Base { public Gui ...

  5. AutoHotKey设置ide的光标功能键

    CapsLock:: SetCapsLockState,off ;锁定为小写 CapsLock & d:: flag_C=1 ;小写d代替control键,实现跨词移动CapsLock &am ...

  6. [机器学习] 简单的机器学习算法和sklearn实现

    机器学习基础算法理解和总结 KNN算法 理解 KNN其实是最好理解的算法之一,其实就是依次和空间中的每个点进行距离比较,取距离最近的N个点,看这N个点的类别,那么要判断的点的类别就是这N个点中类别占比 ...

  7. Xor Sum

    6498: Xor Sum 时间限制: 1 Sec  内存限制: 128 MB提交: 27  解决: 13[提交][状态][讨论版][命题人:admin] 题目描述 You are given a p ...

  8. python_94_类变量实例变量

    class Role: n=123#类变量 name='我是类name' list=[] def __init__(self,name,role,weapon,life_value=100,money ...

  9. Java中什么是匿名对象,空参构造方法输出创建了几个匿名对象,属性声明成static

    package com.swift; //使用无参构造方法自动生成对象,序号不断自增 public class Person { private static int count; //如果在定义类时 ...

  10. CPL学习笔记(二)

    数组 数组(array) 声明通用格式为: typeName arrayName[arraySize]. arrayName指定元素数目,必须为整型常量或const值.(不能是变量) int a[3] ...