bzoj1345 序列问题 (贪心)】的更多相关文章

考虑某个点产生的贡献: 如果i左边是一个比它小的数x,那有两种情况: 1.x的左边的数y大于i,肯定要把x合并到i,i的贡献++ 2.x的左边的数y小于i,那肯定要把x合并到y,而这时候递归地来考虑,总有一天y或更左边的一个数是要合并到i上的,i的贡献++ 如果i左边的数x比它大,那就把i合并到x,不是考虑这个点的时候需要计算的 对于右边是同理的 也就是说,每个点的贡献就是它相邻左右两边<它的个数 如果有相等的话,我们这两个要么把左边的合并到右边,要么右边的合并到左边,所以在统计左右的时候一边允…
1046: [HAOI2007]上升序列 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3723  Solved: 1271[Submit][Status][Discuss] Description 对于一个给定的S={a1,a2,a3,…,an},若有P={ax1,ax2,ax3,…,axm},满足(x1 < x2 < … < xm)且( ax1 < ax2 < … < axm).那么就称P为S的一个上升序列.如果有多…
构建seq2seq模型,并训练完成后,我们只要将源句子输入进训练好的模型,执行一次前向传播就能得到目标句子,但是值得注意的是: seq2seq模型的decoder部分实际上相当于一个语言模型,相比于RNN语言模型,decoder的初始输入并非0向量,而是encoder对源句子提取的信息.因此整个seq2seq模型相当于一个条件语言模型,本质上学习的是一个条件概率,即给定输入\(x\),学习概率分布\(P(y|x)\).得到这个概率后,对应概率最大的目标句子\(y\)就是模型认为的最好的输出.我们…
题意: 给你一个序列,长度为n.你需要进行n - 1次操作,每次合并两个相邻的数,代价是max,合并后成为max,求最小代价. n <= 1e6 解: 有个显然的做法是nlogn的,显然不行... 要搞个O(n)的算法,显然是贪心. 然而想不出来... 主要有两种思路. ①合并成一颗树.从根向下考虑. 根的贡献就是他的子节点数. 然后问题递归. 我们还可以证明有一种最优解,每个位置的数至多被合并2次. 那么就是一颗大根堆. 也可以说:若一个数的旁边比他小,那么一定会有一次合并过来,贡献为他自己.…
设si为该序列的异或前缀和,则显然相当于求Σmax{sj+sj^si} (i=1~n,j=0~i).从高位到低位考虑,如果该位si为1,无论sj怎么填都是一样的:如果该位si为0,则sj该位应尽量为1.考虑对每个x预处理出满足si&x=x的最小i.这样贪心时就很好办了.这可以类似前缀和(或者说就是dp)的预处理. 使用类似的方法可以(n+v)log做选两个数使其or最大的问题. #include<iostream> #include<cstdio> #include<…
Description 对于一个长度为n的非负整数序列b_1,b_2,...,b_n,定义这个序列的能量为:f(b)=max{i=0,1,...,n}((b_1 xor b _2 xor...xor b_i)+(b_{i+1} xor b_{i+2} xor...xor b_n))其中xor表示按位异或(XOR),给定一个长度为n的非 负整数序列a_1,a_2,...,a_n,请计算a的每个前缀的能量值. Input 第一行包含一个正整数n(n<=300000),表示序列a的长度. 第二行包含n…
题目传送门 题目描述 小C有一个N个数的整数序列,这个序列的中的数两两不同.小C每次可以交换序列中的任意两个数,代价为这两个数之和.小C希望将整个序列升序排序,问小C需要的最小代价是多少? 输入输出格式 输入格式: 第一行,一个整数N. 第二行,N个整数,表示小C的序列. 输出格式: 一行,一个整数,表示小C需要的最小代价. 输入输出样例 输入样例#1: 复制 6 8 4 5 3 2 7 输出样例#1: 复制 34 说明 数据范围: 对于30%的数据,1<=N<=10: 对于全部的数据,1&l…
题意 链接:https://vjudge.net/problem/HDU-6586 给你一个字符串和k,还有每个字符出现次数的限制,求一个长度为k的字典序最小的满足限制的子序列. 思路 先构造出序列自动机,顺带把num(i,j)(下标为i后面的字符为j的个数)求出来. 题目要求字典序最小,我们就贪心的对每一位每次从a~z枚举,check是否满足. check(x,y,t):第x位放字符y且第x-1位是原串的下标t所表示的字符.要满足以下几点: 用过的字符y的数量+1<=r[y] t后面要有j字符…
题目描述 对于一个给定的序列a1, -, an,我们对它进行一个操作reduce(i),该操作将数列中的元素ai和ai+1用一个元素max(ai,ai+1)替代,这样得到一个比原来序列短的新序列.这一操作的代价是max(ai,ai+1).进行n-1次该操作后,可以得到一个长度为1的序列. 我们的任务是计算代价最小的reduce操作步骤,将给定的序列变成长度为1的序列. 输入格式 第一行为一个整数n( 1 <= n <= 1,000,000 ),表示给定序列的长度. 接下来的n行,每行一个整数a…
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 有一个整数序列,我们不知道她的长度是多少(即序列中整数的个数),但我们知道在某些区间中至少有多少个整数,用区间 [ai,bi,ci]来描述它,[ai,bi,ci]表示在该序列中处于[ai,bi]这个区间的整数至少有ci个.现在给出若干个这样的区间, 请你求出满足条件的最短序列长度是多少.如果不存在则输出 -1. [输入格式] 第一行包括一个整数n(n<=1000),表示区间个数: 以下n行每行描述这…