E. Selling Souvenirs time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output After several latest reforms many tourists are planning to visit Berland, and Berland people understood that it's an op…
Summer holidays! Someone is going on trips, someone is visiting grandparents, but someone is trying to get a part-time job. This summer Noora decided that she wants to earn some money, and took a job in a shop as an assistant. Shop, where Noora is wo…
E. Selling Souvenirs 题意: n件物品,有重量和价值,重量只有三种1,2,3.问取不超过m重量的物品的价值总和最大是多少.(n<=1e5,w<=3e5) 思路: n*w很大,常规01背包不能直接做.考虑到物品重量不超过3,可以按重量分类物品.枚举重量3的物品取的件数,可以发现如果重量2的物品取得多则重量1的物品就得取得少,反之亦然.因此所取重量1,2的物品的价值和与重量2物品取的件数应该满足一个上凸函数的关系,即有一个极值点,那个点就是当前枚举下的1,2物品最大价值和.因此…
题目链接:http://codeforces.com/problemset/problem/571/B 题意: 给你一个长度为n的数列a[i]. 现在你可以随意改变数字的位置,问你 ∑| a[i] - a[i+k] | 的最小值(1 <= i <= n-k). 题解: 将a[i]拆成若干个子序列s[j],子序列中相邻两数在a[i]中的距离为k. 此时原式 = ∑(子序列s[j]内部之差的和) 显然,要想使子序列s[j]内部之差的和尽可能小,子序列s[j]内部一定为升序. 显然,要想使 ∑(子序…
http://codeforces.com/gym/101341/problem/K 题意:给出n个区间,每个区间有一个l, r, w,代表区间左端点右端点和区间的权值,现在可以选取一些区间,要求选择的区间不相交,问最大的权和可以是多少,如果权和相同,则选区间长度最短的.要要求输出区间个数和选了哪些区间. 思路:把区间按照右端点排序后,就可以维护从左往右,到p[i].r这个点的时候,已经选择的最大权和是多少,最小长度是多少,区间个数是多少. 因为可以二分找右端点小于等于当前区间的左端点的某个区间…
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5811 [题目大意] 给出 一张单向图,现在将其划分成了两个部分,问划分之后的点是否分别满足按照一定序列排序后后面的点可以直接与前面的点相连,如果可以,从第二部分拆出几个点到第一部分仍然满足这个性质. [题解] 对于第一问,我们可以拓扑排序判断,对于第二问,我们发现先在第一组的序列中找到第二组每个点的可插入位置,在第二组的位置序列中做最长不下降子序列就是答案. [代码] #include <cst…
最近在工作中遇到一个先排序后分组的需求,发现MySql不同的版本有不同的结果,特此记录. 举例:要求在shop表中查询出各类型商店中价格最高的商品. --表结构-- create table `shop` ( `id` ) PRIMARY KEY, `shop_name` ), `item_name` ), `price` ) ); '); '); '); '); '); '); '); '); '); '); '); 那么很自然地就想到了对价格price进行排序然后再根据商店类型shop_na…
题目: You are a coach at your local university. There are nn students under your supervision, the programming skill of the ii-th student is aiai. You have to form kk teams for yet another new programming competition. As you know, the more students are…
题目链接:https://codeforces.com/contest/1133/problem/C 题意: 给出 $n$ 个数,选取其中若干个数分别组成 $k$ 组,要求每组内最大值与最小值的差值不超过5,求 $k$ 组合起来最多可以放多少个数. 题解: 将 $a[1 \sim n]$ 从小到大排序,排序后每个组必定可以视为数组 $a$ 上一段连续区间, $f[i][j]$ 表示到第 $i$ 个数为止,前面组成 $j$ 组,最多可以包含多少个数. 那么,考虑第 $i$ 个数选取与否,如果不选,…
<二分查找+双指针+前缀和>解决子数组和排序后的区间和 题目重现: 给你一个数组 nums ,它包含 n 个正整数.你需要计算所有非空连续子数组的和,并将它们按升序排序,得到一个新的包含 n * (n + 1) / 2 个数字的数组. 请你返回在新数组中下标为 left 到 right (下标从 1 开始)的所有数字和(包括左右端点).由于答案可能很大,请你将它对 10^9 + 7 取模后返回. 示例 1:输入:nums = [1,2,3,4], n = 4, left = 1, right…