UVA - 10564

题意:

要求从第一层走到最下面一层,只能往左下或右下走
问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径。

f[i][j][k]从下往上到第i层第j个和为k的方案数
上下转移不一样,分开处理
没必要判断走出沙漏
打印方案倒着找下去行了,尽量往左走
 
沙茶的忘注释掉文件WA好多次
 
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=,M=,INF=1e9;
typedef long long ll;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int n,s,w[N<<][N];
ll f[N<<][N][M];
void dp(){
memset(f,,sizeof(f));
for(int j=;j<=n;j++)
f[n+n-][j][w[n+n-][j]]=; //xia
for(int i=n+n-;i>=n;i--)
for(int j=;j<=i-n+;j++)
for(int k=w[i][j];k<=s;k++)
f[i][j][k]=f[i+][j][k-w[i][j]]+f[i+][j+][k-w[i][j]];
//shang
for(int i=n-;i>=;i--)
for(int j=;j<=n-i+;j++)
for(int k=w[i][j];k<=s;k++)
f[i][j][k]=f[i+][j][k-w[i][j]]+f[i+][j-][k-w[i][j]]; }
void print(int i,int j,ll k){//printf("print %d %d %d\n",i,j,k);
if(i==n+n-) return;
if(i<n){
if(j>&&f[i+][j-][k-w[i][j]]){
putchar('L');
print(i+,j-,k-w[i][j]);
}else{
putchar('R');
print(i+,j,k-w[i][j]);
}
}else{
if(f[i+][j][k-w[i][j]]){
putchar('L');
print(i+,j,k-w[i][j]);
}else{
putchar('R');
print(i+,j+,k-w[i][j]);
}
}
}
int main(){
//freopen("1.in","r",stdin);
//freopen("1.out","w",stdout);
while(scanf("%d%d",&n,&s)!=EOF&&(n||s)){
memset(w,,sizeof(w));
for(int i=;i<=n;i++)
for(int j=;j<=n-i+;j++) w[i][j]=read();
for(int i=n+;i<=n+n-;i++)
for(int j=;j<=i-n+;j++) w[i][j]=read();
dp();
int p=;
ll sum=;
for(int i=n;i>=;i--) if(f[][i][s]){p=i;sum+=f[][i][s];} printf("%lld\n",sum);
if(p) printf("%d ",p-),print(,p,s);
putchar('\n');
}
}

UVA 10564 Paths through the Hourglass[DP 打印]的更多相关文章

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

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

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

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

  4. UVA - 10564 Paths through the Hourglass

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

  5. UVA 10564_ Paths through the Hourglass

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

  6. UVA 10564 十 Paths through the Hourglass

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

  7. uva 10564

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

  8. UVA 10163 Storage Keepers(两次DP)

    UVA 10163 Storage Keepers(两次DP) http://uva.onlinejudge.org/index.php? option=com_onlinejudge&Ite ...

  9. uva 11584 Partitioning by Palindromes 线性dp

    // uva 11584 Partitioning by Palindromes 线性dp // // 题目意思是将一个字符串划分成尽量少的回文串 // // f[i]表示前i个字符能化成最少的回文串 ...

随机推荐

  1. navicat怎么导出和导入数据表

    1.选中要导出的数据表,右击,然后点击"导出向导". 2.点击sql脚本文件(*sql)->点击下一步. 3.点击保存位置->下一步->保存 ********** ...

  2. Java程序员必须掌握的8大排序算法

    分类: 1)插入排序(直接插入排序.希尔排序)2)交换排序(冒泡排序.快速排序)3)选择排序(直接选择排序.堆排序)4)归并排序5)分配排序(基数排序) 所需辅助空间最多:归并排序所需辅助空间最少:堆 ...

  3. mybatis 中的where标签

    mybatis中的where标签可以去除 开头的 and 或者 or 但是放在后面的不行 失败的: <select id="countNotesByParam" parame ...

  4. struts通过action返回json

    其实struts2通过action返回json挺简单的,但是就是老要忘,所以索性写在博客上.好的,开始. 首先是引入必须的jar包: struts2-json-plugin-2.3.24.jar 然后 ...

  5. 如何在MAC OS X下安装配置java开发工具

    简介: Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征.Java语言作为静态面向对象编程语 ...

  6. PHP中new static()与new self()的比较

    今天在coding的时候,发现了 new static(),觉得实例化的地方不是应该是 new self()吗?查询了一下才知道两者的区别: 1)在有子类集成的时候,两者的表现不一样 2)php 5. ...

  7. android largeheap 的设定

    现在公司在做tv端的APP,我的任务是视频点播功能,在看公司原有代码的基础上看到在manifiest里面设置了largeheap,所以查阅了一下资料,作为笔记 http://blog.csdn.net ...

  8. e.target.files[0]层层剖析

    因为我现在拿到的一个功能是上传时过滤掉很大尺寸的图片,所以需要来拿到上传时选择图片的size,所以有了这篇博文 不多说 上代码 $('input').change(function(e){ 1️⃣.c ...

  9. 弄一个ajax笔记方便查询-基础知识篇

    jQuery对Ajax做了大量的封装,jQuery采用了三层封装: 最底层的封装方法为:$.ajax() 通过最底层进一步封装了第二层的三种方法:.load().$.get().$.post() 最高 ...

  10. UIPickerView的使用(三)

    前两篇文章 UIPickerView的使用(一) . UIPickerView的使用(二),学习了UIPickerView的单列选择器和双列选择器的使用. 现在我们一起学习相互依赖的多列选择器 1.遵 ...