UVA - 10564

题意:

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

f[i][j][k]从下往上到第i层第j个和为k的方案数
上下转移不一样,分开处理
没必要判断走出沙漏
打印方案倒着找下去行了,尽量往左走
 
沙茶的忘注释掉文件WA好多次
 
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cstring>
  5. using namespace std;
  6. const int N=,M=,INF=1e9;
  7. typedef long long ll;
  8. inline int read(){
  9. char c=getchar();int x=,f=;
  10. while(c<''||c>''){if(c=='-')f=-;c=getchar();}
  11. while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
  12. return x*f;
  13. }
  14. int n,s,w[N<<][N];
  15. ll f[N<<][N][M];
  16. void dp(){
  17. memset(f,,sizeof(f));
  18. for(int j=;j<=n;j++)
  19. f[n+n-][j][w[n+n-][j]]=;
  20.  
  21. //xia
  22. for(int i=n+n-;i>=n;i--)
  23. for(int j=;j<=i-n+;j++)
  24. for(int k=w[i][j];k<=s;k++)
  25. f[i][j][k]=f[i+][j][k-w[i][j]]+f[i+][j+][k-w[i][j]];
  26. //shang
  27. for(int i=n-;i>=;i--)
  28. for(int j=;j<=n-i+;j++)
  29. for(int k=w[i][j];k<=s;k++)
  30. f[i][j][k]=f[i+][j][k-w[i][j]]+f[i+][j-][k-w[i][j]];
  31.  
  32. }
  33. void print(int i,int j,ll k){//printf("print %d %d %d\n",i,j,k);
  34. if(i==n+n-) return;
  35. if(i<n){
  36. if(j>&&f[i+][j-][k-w[i][j]]){
  37. putchar('L');
  38. print(i+,j-,k-w[i][j]);
  39. }else{
  40. putchar('R');
  41. print(i+,j,k-w[i][j]);
  42. }
  43. }else{
  44. if(f[i+][j][k-w[i][j]]){
  45. putchar('L');
  46. print(i+,j,k-w[i][j]);
  47. }else{
  48. putchar('R');
  49. print(i+,j+,k-w[i][j]);
  50. }
  51. }
  52. }
  53. int main(){
  54. //freopen("1.in","r",stdin);
  55. //freopen("1.out","w",stdout);
  56. while(scanf("%d%d",&n,&s)!=EOF&&(n||s)){
  57. memset(w,,sizeof(w));
  58. for(int i=;i<=n;i++)
  59. for(int j=;j<=n-i+;j++) w[i][j]=read();
  60. for(int i=n+;i<=n+n-;i++)
  61. for(int j=;j<=i-n+;j++) w[i][j]=read();
  62. dp();
  63. int p=;
  64. ll sum=;
  65. for(int i=n;i>=;i--) if(f[][i][s]){p=i;sum+=f[][i][s];}
  66.  
  67. printf("%lld\n",sum);
  68. if(p) printf("%d ",p-),print(,p,s);
  69. putchar('\n');
  70. }
  71. }

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. python征程1.4(初识python)

    1.列表解析. (1)这是一个,让人听起来十分欣喜的术语,代表着你可以通过一个循环将所有值放到一个列表中.python列表解析属于python的迭代中的一种,相比python for循环速度会快很多. ...

  2. 这个jQuery导航菜单怎么样

    效果体验:http://keleyi.com/keleyi/phtml/jqtexiao/39.htm HTML文件代码: <!DOCTYPE html> <html xmlns=& ...

  3. JavaScript学习笔记7 之DOM文档对象模型

    一.什么是DOMDocument Object Model 文档 -------对象 ----模型-------缩写DOM DOM是针对HTML和XML文档的一个API(应用程序编程接口).DOM描绘 ...

  4. 爬虫的入门以及scrapy

    一.简介 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟 ...

  5. MyEclipse使用心得:集成和使用Maven的方法

    MyEclipse下载:http://www.myeclipsecn.com/download/ 第一步:下载和安装 1.官网下载Maven:http://maven.apache.org/downl ...

  6. 【转】swift实现ios类似微信输入框跟随键盘弹出的效果

    swift实现ios类似微信输入框跟随键盘弹出的效果 为什么要做这个效果 在聊天app,例如微信中,你会注意到一个效果,就是在你点击输入框时输入框会跟随键盘一起向上弹出,当你点击其他地方时,输入框又会 ...

  7. hotCity 小程序城市选择器, 城市数据库可自己导出

    hotCity 城市选择器, 城市数据库可自己导出 后台数据API 由HotApp小程序统计提供并维护,如果需要导出并部署在公司的生产环境,最后有SQL导出下载地址 开源地址 https://gith ...

  8. ThinkPHP3快速入门教程-:基础

    一.ThinkPHP的认识: ThinkPHP是一个快速.简单的基于MVC和面向对象的轻量级PHP开发框架. 二.下载后的目录结构: ├─ThinkPHP.php     框架入口文件 ├─Commo ...

  9. jQuery对表格的操作及其他应用

    表格操作 1.隔行变色:对普通表格进行隔行换色:单击显示高亮样式:复选框选中高亮 <!DOCTYPE html> <html> <head> <meta ht ...

  10. windows下安装nginx

    说起开发,自己感到非常惭愧,由于公司让我给<绿电侠>项目写整体架构解决方案,才开始接触nginx这个东东,突然觉得它是一把非常好的利器. 本文主要记录在windows下安装nginx,另参 ...