[topcoder]IncreasingSubsequences
http://community.topcoder.com/stat?c=problem_statement&pm=7753&rd=10672
http://community.topcoder.com/tc?module=Static&d1=match_editorials&d2=srm348
这道题看着就是DP,但怎么DP呢?
一开始按照测试例子{1,3,2,6,4,5}和答案{1,2,4,5}, {1,3,4,5}, {1,2,6} and {1,3,6}产生了错觉,以为必须要以该点结尾的最长子序列。
写完之后比照正确答案调试许久,发现不对。{4,2,1,3,5}可以产生序列{1,3,5},{2,3,5}和{4,5}。但最后那个显然不是最长子序列。
所以对照答案,正确的是,从左到右计算以a[i]结束的序列个数cnt[]。第a[i]个的和之前的a[j]有关,j从i-1往0回推,如果a[j]比a[i]小,那么(可能)要加上cnt[j]。但如果j和i中已经有数a[x]大于j了,就不算了,因为j可能在a[x]结尾的序列里算过了。
所以用{4,2,1,3,5}举例,计算5的时候,会先算到3的cnt值是2,然后算到4的cnt值是1,那么5的cnt值是2+1==3。1不用往里考虑是因为1<3,肯定在以3结尾的子序列里了。
那么计算最后的结果时,从后往前扫,如果后面已经有比现在的a[i]大的了,就不用再加了,肯定在它的序列里了。拿{1,3,2,6,4,5}举例,从后往前扫,5算完以后,4不用加了,肯定在5结尾的序列里,扫到6时,6大于之前的max 5,所以有个新的序列,要加上。
import java.util.*; public class IncreasingSubsequences
{
public long count(int[] a)
{
ArrayList<Long> end = new ArrayList<Long>();
end.add(1l);
for (int i = 1; i < a.length; i++)
{
int shadow = 0;
long sum = 0;
for (int j = i-1; j >= 0; j--)
{
if (a[j]>shadow && a[j] < a[i])
{
sum = sum + end.get(j);
shadow = a[j];
}
}
if (sum == 0) sum = 1;
end.add(sum);
}
long ans = 0;
int max = 0;
for (int i = a.length -1; i >= 0; i--)
{
if (a[i] > max)
{
ans = ans + end.get(i);
max = a[i];
}
}
return ans;
}
}
[topcoder]IncreasingSubsequences的更多相关文章
- TopCoder kawigiEdit插件配置
kawigiEdit插件可以提高 TopCoder编译,提交效率,可以管理保存每次SRM的代码. kawigiEdit下载地址:http://code.google.com/p/kawigiedit/ ...
- 记第一次TopCoder, 练习SRM 583 div2 250
今天第一次做topcoder,没有比赛,所以找的最新一期的SRM练习,做了第一道题. 题目大意是说 给一个数字字符串,任意交换两位,使数字变为最小,不能有前导0. 看到题目以后,先想到的找规律,发现要 ...
- TopCoder比赛总结表
TopCoder 250 500 ...
- Topcoder几例C++字符串应用
本文写于9月初,是利用Topcoder准备应聘时的机试环节临时补习的C++的一部分内容.签约之后,没有再进行练习,此文暂告一段落. 换句话说,就是本文太监了,一直做草稿看着别扭,删掉又觉得可惜,索性发 ...
- TopCoder
在TopCoder下载好luncher,网址:https://www.topcoder.com/community/competitive%20programming/ 选择launch web ar ...
- TopCoder SRM 596 DIV 1 250
body { font-family: Monospaced; font-size: 12pt } pre { font-family: Monospaced; font-size: 12pt } P ...
- 求拓扑排序的数量,例题 topcoder srm 654 div2 500
周赛时遇到的一道比较有意思的题目: Problem Statement There are N rooms in Maki's new house. The rooms are number ...
- TopCoder SRM 590
第一次做TC,不太习惯,各种调试,只做了一题...... Problem Statement Fox Ciel is going to play Gomoku with her friend ...
- Topcoder Arena插件配置和训练指南
一. Arena插件配置 1. 下载Arena 指针:http://community.topcoder.com/tc?module=MyHome 左边Competitions->Algorit ...
随机推荐
- IIS限制ASP.Net 文件上传大小解决方案,修改IIS7/7.5配置
当在web.config中设置了 httpruntime 后还是无法成功上传大文件,则要修改IIS的系统config IIS 7 默认文件上传大小是30M 要突破这个限制: 修改IIS的applica ...
- Android中去掉标题栏的3种方法
1.在java代码中 (SplashActivity继承AppCompatActivity时无效)
- Retrofit研究1
以下为来自Github的retrofit的介绍.话说,翻译还真蛋疼,就这个花了快3个小时. Retrofit 一个在Android和Java上类型安全的HTTP客户端 介绍 Retrofit可以把你的 ...
- ubuntu 安装 fcitx
安装fcitx (1)添加ppa源 sudo add-apt-repository ppa:fcitx-team/nightly 或 sudo add-apt-repository ppa:fcitx ...
- OC加强-day05
#program mark - 0_11 NSRange结构体介绍 [掌握] 是Foundation框架中的一个结构体 NSRange 定义的一个变量的两个属性 location:起始下标 lengt ...
- (hdu)1950 Bridging signals(最长上升子序列)
Problem Description 'Oh no, they've done it again', cries the chief designer at the Waferland chip f ...
- (转)IOS 学习笔记 2015-03-23 如何获取IOS程序的系统信息
首页 > 程序开发 > 移动开发 > IOS > 正文 iOS 获取手机的型号,系统版本,软件名称,软件版本 -- 个评论 作者:vipa1888 收藏 我要投稿 网上搜索出来 ...
- spark - 从HDFS加载文件并分析
scala> val file=sc.textFile("/workspace/bpUserinfo_logs/bpUserinfo_20160212.log") scala ...
- DOM Ready 详解
DOM Ready 概述 熟悉jQuery的人, 都知道DomReady事件. window.onload事件是在页面所有的资源都加载完毕后触发的. 如果页面上有大图片等资源响应缓慢, 会导致wind ...
- WordPress D8 主题当中截取文章首图并显示的函数
取自 WordPress D8 主题; 路径 theme\d8\modules ; if ( ! function_exists( 'deel_thumbnail' ) ) : function de ...