[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 ...
随机推荐
- Java并发——显示锁
Java提供一系列的显示锁类,均位于java.util.concurrent.locks包中. 锁的分类: 排他锁,共享锁 排他锁又被称为独占锁,即读写互斥.写写互斥.读读互斥. Java的ReadW ...
- (Entity FrameWork)Code First to an Existing Database
Pre-Requisites You will need to have Visual Studio 2010 or Visual Studio 2012 installed to complete ...
- VIEW层AJAX提交表单到Controller的实体
在MVC环境中,AJAX方式添加一个对象,这个对象在Models中是一个视图模型,在前台显示时是这样的代码: <%using (Html.BeginForm()) { %> ...
- 周末充电之WPF(一).初试牛刀
追的剧已经赶上更新的速度了,突然觉得一下子就闲了.趁着这点时间,刚好学点 WPF .看到这边,好多人估计得感叹技术宅约等于单身狗,哈哈.好了,赶紧进入学习状态. 关注 WPF 或者说对它感兴趣其实多半 ...
- xCode如何导入自定义的snippets文件
xCode代码块snippets导入 目标文件放置位置 ~/Library/Developer/Xcode/UserData/CodeSnippets 操作方法: 解压缩并复制到以下目录即可
- Ladder免费试用版
Ladder这款vpn软件最近在play中国区排名非常高,节节高升,可见大家还真需要这东西,软件做的不错,大家可以在试用版中升级到正式版. 下载地址
- 字节序转换与结构体位域(bit field)值的读取
最近又遇到了几年前遇到的问题,标记一下. 对于跨字节位域(bit field)而言,如果数据传输前后环境的字节序不同(LE->BE,BE->LE),简单地调用(ntohs/ntohl/ht ...
- 九度OJ 1066 字符串排序
题目地址:http://ac.jobdu.com/problem.php?pid=1066 题目描述: 输入一个长度不超过20的字符串,对所输入的字符串,按照ASCII码的大小从小到大进行排序,请输出 ...
- spark-shell 执行脚本并传入参数
使用方法: ./spark-script.sh your_file.scala first_arg second_arg third_arg 脚本: scala_file=$ arguments=$@ ...
- HTML 表单和表格
1.使用表单标签 网站使用 HTML 表单可与用户进行交互,表单元素是允许用户在表单中输入内容,比如:文本框.文本域.单选框.复选框.下拉列表.按钮等等,表单可以把浏览者输入的数据传送到服务器端,这样 ...