路径条数很好找。记录最小路径,就记录到各点的最小字符串,存储起来。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <cstring>
#include <map>
#include <queue>
#include <set>
#include <cassert>
#include <stack>
#include <bitset>
#define mkp make_pair
using namespace std;
const double EPS=1e-;
typedef long long lon;
const lon SZ=,INF=0x7FFFFFFF,mod=;
lon n,k,arr[SZ][SZ],dp[SZ][SZ][];
string str[SZ][SZ][]; void init()
{
memset(dp,,sizeof(dp));
for(int i=;i<=*n-;++i)
{
for(lon j=;j<=abs(n-i)+;++j)
{
cin>>arr[i][j];
}
}
for(lon j=;j<SZ;++j)
{
if(j&)dp[][j][]=;
}
} string toStr(lon x)
{
if(x==)return "";
string res="";
for(;x;)
{
res+=''+x%;
x/=;
}
reverse(res.begin(),res.end());
return res;
} bool cmp(const string &x,const string &y)
{
int pos1=x.find(" ");
int pos2=y.find(" ");
if(pos1!=pos2)return pos1<pos2;
else return x<y;
} void work()
{
for(lon i=;i<=*n-;++i)
{
for(lon j=;j<=abs(n-i)+;++j)
{
lon cur=arr[i][j];
for(lon p=arr[i][j];p<=k;++p)
{
if(i<=n)
{
dp[i][j][p]+=dp[i-][j][p-cur];
dp[i][j][p]+=dp[i-][j+][p-cur];
if(i==)
{
str[i][j][p]=toStr(j-)+" ";
}
else if(dp[i-][j][p-cur]&&dp[i-][j+][p-cur])
{
if(cmp(str[i-][j][p-cur],str[i-][j+][p-cur]))
{
str[i][j][p]=str[i-][j][p-cur]+"R";
}
else
{
str[i][j][p]=str[i-][j+][p-cur]+"L";
}
}
else if(dp[i-][j][p-cur])
{
str[i][j][p]=str[i-][j][p-cur]+"R";
}
else if(dp[i-][j+][p-cur])
{
str[i][j][p]=str[i-][j+][p-cur]+"L";
}
}
else
{
dp[i][j][p]+=dp[i-][j-][p-cur];
dp[i][j][p]+=dp[i-][j][p-cur];
if(i==)
{
str[i][j][p]=toStr(j-)+" ";
}
else if(dp[i-][j-][p-cur]&&dp[i-][j][p-cur])
{
if(cmp(str[i-][j-][p-cur],str[i-][j][p-cur]))
{
str[i][j][p]=str[i-][j-][p-cur]+"R";
}
else
{
str[i][j][p]=str[i-][j][p-cur]+"L";
}
}
else if(dp[i-][j-][p-cur])
{
str[i][j][p]=str[i-][j-][p-cur]+"R";
}
else if(dp[i-][j][p-cur])
{
str[i][j][p]=str[i-][j][p-cur]+"L";
}
}
}
}
}
lon res=;
char tmp=(char)(''+);
string minstr="~~~~~~ ";
for(lon j=;j<=n;++j)
{
res+=dp[*n-][j][k];
if(dp[*n-][j][k])
{
//cout<<" "<<str[2*n-1][j][k]<<" "<<(str[2*n-1][j][k]=="")<<endl;
minstr=min(minstr,str[*n-][j][k],cmp);
}
}
cout<<res<<endl;
if(res)cout<<minstr<<endl;
else cout<<endl;
} int main()
{
std::ios::sync_with_stdio();
//freopen("d:\\1.txt","r",stdin);
lon casenum;
//cin>>casenum;
//cout<<casenum<<endl;
//for(lon time=1;time<=casenum;++time)
for(lon time=;cin>>n>>k,n;++time)
{
init();
work();
}
return ;
}

uva10564的更多相关文章

  1. [置顶] 刘汝佳《训练指南》动态规划::Beginner (25题)解题报告汇总

    本文出自   http://blog.csdn.net/shuangde800 刘汝佳<算法竞赛入门经典-训练指南>的动态规划部分的习题Beginner  打开 这个专题一共有25题,刷完 ...

  2. UVA - 10564 Paths through the Hourglass

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

随机推荐

  1. 一些常用的mysql语句实例-以后照写2

    specification: 规范, 规格, 产品规范, 产品规格, 技术规范, 产品说明书. 如: create_specification, 等等 创建数据库时, 显式地指明, 字符集: crea ...

  2. 在Linux安装和使用LinuxBrew

    简介 LinuxBrew是流行的Mac OS X的一个Linux叉自制包管理器. LinuxBrew是包管理软件,它能从源(在Debian / Ubuntu的如"易/ DEB",并 ...

  3. Nvme固体硬盘Intel750,SM961分别使用一段时间以后对比

    在SM961使用了一年半(2017年1月17日购买)后,再次测试,这次测试使用AS_SSD_Benchmark工具进行测试 感觉CrystalDiskMark工具测出来的分数在所以工具中分数最高 看图 ...

  4. python 之 知识点(1)

    在python是使用bif=built in functions 即内置函数 dir(__builtins__) 可以查看所有的内置函数.注:pycharm中无法使用,不知道原因 help(input ...

  5. IDEA入门及maven配置

    idea基本使用 下载安装 idea下载地址 激活方法 上面的失效使用这个 配置SDKs和编译版本 选择jdk 我是主要用于Java开发,因此配置JDK8 配置编码 其他配置 个人配置主题等 注意 与 ...

  6. P5159 WD与矩阵

    思路 奇怪的结论题 考虑增量构造,题目要求每行每列都有偶数个1,奇偶性只需要增减1就能够调整了,所以最后一列一行一定能调整前面n-1阶矩阵的值,所以前面可以任选 答案是\(2^{(n-1)(m-1)} ...

  7. Tutorial: Implementation of Siamese Network on Caffe, Torch, Tensorflow

    Tutorial: Implementation of Siamese Network with Caffe, Theano, PyTorch, Tensorflow  Updated on 2018 ...

  8. (zhuan) Where can I start with Deep Learning?

    Where can I start with Deep Learning? By Rotek Song, Deep Reinforcement Learning/Robotics/Computer V ...

  9. Windows Service application 初步探索

    今天写了一个windows service程序, 本身这个程序是一个console application, 但是不能够通过F5直接运行, 会出现下面图片所示的错误: 提示说需要安装一个Instalu ...

  10. 微服务架构与实践3_api

    场景分析 描述产品服务,基于REST的接口 表述性状态转移(Representational State Transfer,REST) 任务拆分 将整体要做的工作内容划分成小的任务: 统一时间聚焦一个 ...