UVA10599:Robots(II)(最长上升子序列)
参考博客:http://blog.csdn.net/keshuai19940722/article/details/12163563
# include <stdio.h>
# include <string.h>
int n, m, k, map[101][101];
int dp[10001];//记录以i结尾的最长上升子序列长度
int pre[10001];//记录前驱节点
int cnt[10001];//保存以i结尾的最长上升子序列总数
int g[10001];//记录每个坐标的id
void init()
{
int a, b;
memset(map, 0, sizeof(map));
while(scanf("%d%d",&a,&b),a+b)
map[a][b] = 1;
k = 0;
for(int i=1; i<=n; ++i)
for(int j=1; j<=m; ++j)
if(map[i][j])
g[k++] = (i-1)*m + j-1;//减1处理方便下面判断j点和i点的方位。
if(!map[n][m])//将终点放进去,方便统计最长上升子序列和路径总数。
g[k++] = n*m-1;
}
void solve()
{
for(int i=0; i<k; ++i)
{
dp[i]=1, cnt[i]=1, pre[i]=-1;
for(int j=0; j<i; ++j)
if((g[j]%m) <= (g[i]%m))
{
if(dp[j]+1 == dp[i])
cnt[i] += cnt[j];
else if(dp[j]+1 > dp[i])
dp[i] = dp[j]+1, cnt[i] = cnt[j], pre[i] = j;
}
}
if(!map[n][m])
--dp[k-1];
}
void put(int num)
{
if(pre[num] != -1)
put(pre[num]);
if(num != k-1 || map[n][m])
printf(" %d",g[num]+1);
}
int main()
{
int cas = 1;
while(scanf("%d%d",&n,&m)==2)
{
if(n==-1 && m==-1)
break;
init();
solve();
printf("CASE#%d: %d %d",cas++, dp[k-1], cnt[k-1]);
put(k-1);
printf("\n");
}
return 0;
}
转载于:https://www.cnblogs.com/junior19/p/6730084.html
UVA10599:Robots(II)(最长上升子序列)的更多相关文章
- [ACM] hdu 1025 Constructing Roads In JGShining's Kingdom (最长递增子序列,lower_bound使用)
Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65 ...
- P1439 【模板】最长公共子序列
题目描述 给出1-n的两个排列P1和P2,求它们的最长公共子序列. 输入输出格式 输入格式: 第一行是一个数n, 接下来两行,每行为n个数,为自然数1-n的一个排列. 输出格式: 一个数,即最长公共子 ...
- [HAOI2007]上升序列(最长上升子序列)
题目描述 对于一个给定的 S=\{a_1,a_2,a_3,…,a_n\}S={a1,a2,a3,…,an} ,若有 P=\{a_{x_1},a_{x_2},a_{x_3},…,a_{x_m}\ ...
- HDOJ1025(最长上升子序列)
Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65 ...
- DP——最长上升子序列(LIS)
DP——最长上升子序列(LIS) 基本定义: 一个序列中最长的单调递增的子序列,字符子序列指的是字符串中不一定连续但先后顺序一致的n个字符,即可以去掉字符串中的部分字符,但不可改变其前后顺序. LIS ...
- 【洛谷P4309】最长上升子序列
题目大意:给定一个序列,初始为空.现在我们将 1 到 N 的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数字,我们都想知道此时最长上升子序列长度是多少? 题解:学会了 rope 操 ...
- [LeetCode每日一题]1143. 最长公共子序列
[LeetCode每日一题]1143. 最长公共子序列 问题 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度.如果不存在 公共子序列 ,返回 0 . 一个字符串 ...
- 用python实现最长公共子序列算法(找到所有最长公共子串)
软件安全的一个小实验,正好复习一下LCS的写法. 实现LCS的算法和算法导论上的方式基本一致,都是先建好两个表,一个存储在(i,j)处当前最长公共子序列长度,另一个存储在(i,j)处的回溯方向. 相对 ...
- 动态规划之最长公共子序列(LCS)
转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...
随机推荐
- Redis 过期时间相关命令
命令 示例和描述 PERSIST PERSIST key-name —— 移除键的过期时间 TTL TTL key-name —— 查看给定键距离过期还有多少秒 EXPIRE EXPIRE key-n ...
- GIT本地安装及汉化
GIT本地安装及汉化过程 1.下载地址: 链接:https://pan.baidu.com/s/1TMxxngZy4Y1De5eC1kSTMg 提取码:e593 2.下载完成之后如下图所示3个文件: ...
- Serverless无服务器云函数入门唠叨
B站录了个视频: https://www.bilibili.com/video/av59020925/
- Array(数组)对象-->slice() 方法
1.定义和用法 slice()方法可提取字符串的某个部分,并以新的字符串返回被提取的部分. 语法: array.slice(start, end) 参数:start 开始元素的下标,截取内容包含该元素 ...
- Struts2-学习笔记系列(14)-拦截器
6.1对action 的拦截 自定义拦截器: public class MyInterceptor extends AbstractInterceptor { private String name; ...
- MODIS系列之NDVI(MOD13Q1)四:MRT单次及批次处理数据
前言: 本篇文章的出发点是因为之前接触过相关研究,困囧于该系列资料匮乏,想做一个系列.个人道行太浅,不足之处还请见谅.愿与诸君共勉. 数据准备: MODIS数据产品MOD13Q1—以2010年河南省3 ...
- AJ学IOS(44)之网易彩票自定义图片在右边的Button_弹出view_ios6,7简单适配
AJ分享,必须精品 效果: 注意图里面了吗,其实那个效果做起来真的很简单,在iOS中苹果给我们封装的很好,关键是那个按钮 系统的按钮的图片是在左边的,这里我们需要把他调整到右边,然后呢需要我们自己做一 ...
- AJ学IOS(39)UI之核心动画之CABasicAnimation(基础动画)
AJ分享,必须精品 一.CABasicAnimation简介 CAPropertyAnimation的子类 属性解析: fromValue:keyPath相应属性的初始值 toValue:keyPat ...
- (转) POJO和javabean的异同
参考:http://blog.csdn.net/lushuaiyin/article/details/7436318 一:什么是POJOPOJO的名称有多种,pure old java object ...
- matlab将数据读取和写入txt文档
原文链接 matlab中打开文件 fid = fopen(文件名,‘打开方式’): 说明:fid用于存储文件句柄值,如果fid>0,这说明文件打开成功. 另外,在这些字符串后添加一个“t”,如‘ ...