题意:从C有奶牛中选N头,给出它们的分数scores和资助aid,要是这N头牛的总资助不超过F,同时它们中分数的中位数最大。求这个最大的中位数。
思路:按照分数排序,枚举每头牛作为中位数,计算牛i前面N/2头牛的最小资助和后面N/2牛的最小资助(用到优先队列)。最后从后往前找第一个满足l[i]+r[i]+cow[i].second<=F的即为答案。...
分类:
其他好文 时间:
2015-03-21 17:13:09
阅读次数:
247
题目链接:点击打开链接
题意:
给定n长的序列,q个询问
下面n个数字给出序列
每个询问[l, r] k ,输出该区间中第k大的数
先建一个n个节点的空树,然后每次从后往前新建一棵树,依附原来的空树建。询问就是在树上二分。
#include
#include
#include
#include
#include
#include
using namespace st...
分类:
其他好文 时间:
2015-03-16 23:14:28
阅读次数:
197
1.直接插入排序
《算法导论》P10,《数据结构》P265
向已经排好序的数组a[1..j-1]插入a[j],进行一趟循环遍历。插入排序的基本操作是在一个有序表进行查找和插入。每一趟插入排序从后往前进行比较,便于数组中元素的向后移动。
空间复杂度:O(1)(当使用swap交换时,可实现原址)
时间复杂度:(n^2)/4
即O(n^2)
2.拓展
1)折半查找排...
分类:
编程语言 时间:
2015-03-16 16:29:20
阅读次数:
204
题意:
给一块m行n列的土地,有一些格可以种树,另外一些不可以,树不能相邻,问一共有多少种种法。
分析:
从后往前种,子问题向父问题扩展,当种到某一格时只有他和他后面的n-1个格子的情况对它有影响,故对这n个格子进行编码为状态S,表示种完(多米诺骨牌那题是放置前,注意区别,都可行)这n个格子的状态。父问题由稍小子问题逐步解决,正是动态规划的思想。
代码:
//poj 3254
//sep...
分类:
其他好文 时间:
2015-03-16 07:34:31
阅读次数:
149
[基本思想]
关键:在前面已经排好序的序列中找到合适的插入位置
步骤:
1. 从第一个元素开始,该元素可以认为已经排好序。
2. 取出下一个元素,在已经排好序的元素序列中从后往前扫描进行比较。
3. 如果该元素(已排序) 大于新元素,则将该元素移到下一位置。
4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置。
5. 将新元素插入到该位置后面。
6. 重复步骤2~5...
分类:
编程语言 时间:
2015-03-12 17:18:57
阅读次数:
227
//两个指针从后往前扫一遍就行void merge(int A[], int m, int B[], int n) { int i = m-1,j = n - 1 ,k = m+n-1; while(i>=0&&j>=0){ if(A[i]>B[j]) A[k--] = A...
分类:
其他好文 时间:
2015-03-11 14:37:53
阅读次数:
115
题意:有n张股票,给出每天股票的买进数量,当天的股票价格和当天最大抛出量,第i天得到的股票当天可以不抛,可以留到以后抛。问这n天最多能卖多少钱?
思路:贪心,从后往前贪心,最后一天的股票当然只能在最后一天卖出,第i天的可以在第i天及以后卖出,那么就可以维护一个优先队列来存放第i天及以后的天数中抛出量不为零的日期(价格高的优先),那抛出第i天时先从优先队列中取出价格最高的。...
分类:
其他好文 时间:
2015-03-10 12:18:11
阅读次数:
128
bc32 1002 预处理 哈希
题意:
给定一个数组(a[0],a[1],a[2],a[n-1])和一个整数K,请来判断一下是否存在二元组(i,j)(0
限制:
1
思路:
先从前到后求sum[i],然后从后往前扫,每到一个sum[i],判断sum[i]+k是否在后面的sum[j](j>i)出现过,如果出现过则yes,否则把sum[i]插入hash表中用于后续的查询。...
分类:
其他好文 时间:
2015-03-08 17:12:36
阅读次数:
135
很明显的DP状态了,设dp[i][j],设当前在状态点i,经过j步能得到的最大分值。也是从root直接扩展就可以了。至于字符串,实在有点困难,开始想着记录路径,但后来发现路径从后往前回溯不一定是字典序最小,夭折。。。看别人的,发现直接就把字符串存下来,跪了,也对,毕竟才50个。直接存字符串,比较,选...
分类:
其他好文 时间:
2015-03-03 23:33:32
阅读次数:
162
题目来源:URAL 1684. Jack's Last Word题意:输入a b 把b分成若干段 每一段都是a的前缀思路:b为主串然后用a匹配b 记录到b的i位置最大匹配的长度 然后切割 切割的时候要从后往前假设a = abac b = abab 那么假设从前往后 首先覆盖了aba 然后b就不能覆盖...
分类:
其他好文 时间:
2015-03-02 14:46:35
阅读次数:
135