题解:CF727F Polycarp's problems】的更多相关文章

原题题意 给出长度为n的有序数组,m次询问,每次给出一个正整数x.你要删除数组中最少的元素,使得数组中的前缀和+x都为非负整数.允许离线,n≤750,m≤200,000. 原题思路 首先注意到,x能成功通过测试当且仅当前缀和中最小的数≥x. 将询问从大到小排个序,对于一个新的询问,每次尝试从数组中删除最优的一个数,使得成功的机会更大. 何为最优?我们注意到,ai只会对后面的数造成影响.设当前前缀和最小为now,fi为前i个前缀和中最小的数,则答案会增加 max { min { now-ai ,…
Polycarp's problems time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Polycarp is an experienced participant in Codehorses programming contests. Now he wants to become a problemsetter. He se…
题目链接:http://codeforces.com/contest/727/problem/F 题目大意:有n个问题,每个问题有一个价值ai,一开始的心情值为q,每当读到一个问题时,心情值将会加上该问题的价值.问题只能按顺序读.有m个询问,求当q=bi时,至少要删去多少个问题才能使得在任何时候心情值都>=0 参考这篇:http://blog.csdn.net/aufeas/article/details/53031439 解法一: 贪心 分别求出最多删去i个问题需要的初始心情值的最小值f[i]…
Description 有一个长度为 \(n\) 有正负权值的序列,你一开始有一个值,每次到一个权值就加上,最少需要删掉多少数值才能到序列末尾.\(n \leqslant 750,m \leqslant 2 \times 10^5\) Sol DP+二分. 发现这个东西有后效性,就是前面选不选会影响后面的决策,并且权值太大无法记录. 但是我们可以倒着做,因为后面的决策无法影响前面的决策. \(f[i][j]\) 表示到 \(i\) 删掉 \(j\) 个至少需要的初始权值. 因为初始权值非负,所以…
https://leetcode-cn.com/problems/median-of-two-sorted-arrays/submissions/ 我的解法: 我看到了那个log的要求,也第一时间想到了二分,但是实在想不出咋二分,最后只能写个暴力的... class Solution { public double findMedianSortedArrays(int[] nums1, int[] nums2) { int m = nums1.length; int n = nums2.leng…
https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/submissions/ 我的解法: class Solution { HashSet<Character> set = new HashSet<Character>(); public int lengthOfLongestSubstring(String s) { int len = s.length(); char[]…
题目链接 [题解] 看到这个题解 写的代码. 就是加个备忘录法.优化一下暴力的做法. 匹配的时候如果遇到号的话,就两种可能.不再考虑它前面一个字符了. 跳过这个或者.或者继续用前面那个字符匹配. 即dfs(i,j+2) 不和他匹配了 && (i和j能匹配且j+1是个则继续复制一个和其匹配,dfs(i+1,j)) 当然,还得尝试一下不用*通配符了(s1[i]==s2[j])然后直接看看dfs(i+1,j+2)能不能匹配 [代码] class Solution { public: map<…
这是两种简单的素数筛法, 好不容易理解了以后写篇博客加深下记忆 首先, 这两种算法用于解决的问题是 : 求小于n的所有素数 ( 个数 ) 比如 这道题 在不了解这两个素数筛算法的同学, 可能会这么写一个isPrime, 然后遍历每一个数, 挨个判断 : 从2判断到n-1 bool isPrime(int n) { for (int i = 2; i < n; i++) if (n % i == 0) return false; return true; } 从2判断到\(\sqrt{n}\) b…
从超高频的后端面试题出发,指明学习方向 大家好,我是鱼皮. 还记得我的老弟小阿巴么?他目前正值大一暑假,在家自学编程(刷短视频)中. 他整个大一期间基本都在学习前端.后来,我带他写了一次后端,结果就崩了,写了一堆 bug! 详情请阅读:前端老弟第一次写后端,崩了! 但没想到,这货踩了坑后,反而爱上了后端开发.这一到周末就缠着我,让我给他讲讲后端开发应该学习哪些知识. 虽然很想给他总结一份后端学习路线,但我也很忙,于是就思考有没有什么更快捷的方式让他了解到后端要学的技术. 我想想:他学编程是为了找…
面试算法题 dfs相关 全排列 #include<bits/stdc++.h> using namespace std; const int N = 10; //用一个path数组来存储每次到底层的路径 int path[N]; //用一个布尔数组来存储每次已经遍历的点,默认是false bool st[N]; int n; //u表示当前的层数 void dfs(int u) { //当已经到达最底层了,溯回并输出路径 if( u == n ) { for(int i = 0 ; i <…