[USACO19FEB]Mowing Mischief】的更多相关文章

题目大意: 给定平面上的一些点,求这些点的一个\(LIS\),并且还需要满足下列式子最小: \[ \sum_{i=1}^{n-1}(a[i+1].x-a[i].x)*(a[i+1].y-a[i].y) \] 题解: 比较巧妙的一道题. 首先我们需要找出一个性质,我们先令\(dp[i]\)表示以\(i\)点结尾的\(LIS\),然后这些\(LIS\)相同的点在平面上是横坐标递增,纵坐标递减的,下面我们说的转移点的顺序都是按照这个顺序来的. 然后我们在观察转移,我们令两个转移点\(j\)和\(k\)…
题目链接:P5543 [USACO19FEB]The Great Revegetation S 好坑啊,都身败名裂了. 思路一: 考虑染色法,跑一遍搜所就好了,不给代码了. 思路二: 考虑并查集,我想到一个\(O(n\alpha(n)+n\log n)\)的做法,首先维护多少不能联系的集合,根据简单的排列组合知识就知道是\(2^n(n\text{是集合数})\). 再开一个来判断是否矛盾就好了,这里用了一个并查集,中间清空一下就好了. 思考:何时不合法?(搜索也要注意呀) 显然要判断S与D的排斥…
Link 题目描述 给定一行 \(n\) 个非负整数 \(a[1]..a[n]\) .现在你可以选择其中若干个数,但不能有超过 \(k\) 个连续的数字被选择.你的任务是使得选出的数字的和最大. 输入格式 第一行两个整数 \(n\) ,\(k\) 以下n行,每行一个整数表示 \(a[i]\). 输出格式 输出一个值表示答案. 输入输出样例 输入 #1 5 2 1 2 3 4 5 输出 #1 12 说明/提示 对于20%的数据,n <= 10 对于另外20%的数据, k = 1 对于60%的数据,…
题目 我们的神仙教练在考试里放了这道题,当时我非常惊讶啊 背包是\(O(n^3)\)的吧明明是带根号的好吧,那既然要优化的话 NTT!什么时候我们教练会在考试里放多项式了 模数\(1e9+7\)? 任意模数不存在的,我们开int128找一个大一点的\(NTT\)模数就可以了 还是说一下\(NTT\)的做法吧,发现我们要求长度大于\(Y\)的路径可能不太好求,于是我们正难则反一下,我们求出有多少种拼法可以使得路径长度小于\(Y\)就可以了 每一棵树里只能出一条路径,于是我们可以把一棵树的路径信息搞…
题目链接 题意分析 首先我们可以得出计算公式 \[s_i=\prod_{k=1}^i(1-p_k)\] \[f_i=\sum_{k=1}^i\frac{p_k}{1-p_k}\] 那么 \[ans(i,j)=\frac{s_r}{s_{l-1}}{f_r-f_{l-1}}\] 强行枚举 \(O(n^2)\) 我们冷机观察一波发现 可以使用尺取法 然后优化成了\(O(n)\) CODE: #include<iostream> #include<cstdio> #include<…
Luogu5242 通过观察数据,我们可以发现,右端点的取值是单调递增的.于是,我们可以极限一波,用一个双指针法,类似于队列. 右端点的取值满足以下公式: (1-p1)(1-p2)..(1-pn) * (p1/(1-p1) + p2/(1-p2) + ... + pn/(1-pn)) 记录两个变量,表示和和积即可. tmp1为积,tmp2为和 当任何一个 p 大于 0.5 的时候,选择一段的答案不比选择这一个的答案大.因此直接特判这种情况. 常规化式子 #include<bits/stdc++.…
Luogu5243 题解 即O(N^2)暴力统计出每个森林的路径,从ctgn个集合中各选出一个数,使得长度>=Y的方案数. 用背包统计.具体实现: \(dp[i+j][0]\leftarrow dp[i][0]*g[j][0]\) \(dp[i+j][1]\leftarrow dp[i][0]*g[j][1] + dp[i][1]*g[j][0]\) 然后就是>=Y的和Y放到一起,并且可以从X*ctgn就开始转移 细节详见代码 数据范围\((n^2)\)能做的事 : 以每个点为根遍历一遍算答案…
题目链接:https://ac.nowcoder.com/acm/contest/2652/G 题目大意:与上一篇博客 烽火传递 差不多. 1.一共n头羊,若超过m头连续的羊在一起,就会集体罢工,每头羊有一个工作效率,求如何选择羊使得工作效率最高 题解思路: 1.我们可以转换思路,首先选择全部的羊,然后这是集体罢工,我们去拆分他们,即转换成了每连续的 m + 1头羊之间必须拆掉一头羊,则作为效率损失. 2.dp[i] 表示 拆掉第 i 只羊所造成的最小总损失.于是与烽火传递一样了. 3.该题还有…
ri,被黄题虐. 思路:贪心?? 提交:2次 错因:没有特判 题解: 先排序. 最小代价:固定区间长度为\(n\),我们扫一遍数组看区间最多包含几个数,设为 \(mx\) ,答案就是\(n-mx+1\):然而还要特判一种,见下. 此时答案是2,但是我们会算成1 最大代价:考虑一定是往一边缩的感觉,于是是端点先跳到一边的里面,然后这一边开始往里缩,直到缩成n 所以答案是\(\max(a[n-1]-a[1]+1,a[n]-a[2]+1)-(n-1)+1\),最后的加一是刚开始端点往里跳的代价. 代码…
原题戳这里 题解 显然原题等价于让我们求这个式子\(\prod\limits_{i=l}^{r}(1-p_i)\sum\limits_{i=l}^{r}\frac{p_i}{1-p_i}\)的最大值是多少 打打表,或者直观上感受一下,这东西是个凸壳,进一步观察,你会发现随着左端点的右移,最优决策点也在右移,于是拿个\(two\ pointer\)搞一搞就好了 凸性的证明在代码下面QWQ 代码: #include <bits/stdc++.h> using namespace std; #def…