// 标注:本文旨在为博主确立一种题解的基本范式,以避免博主的题解流于AC代码的粘贴.此基本范式为:完整而简洁明了的思路及其推导说明,力图触及问题的本质并衍生对同类问题的思路分析,使得题解具有泛用性,同时可以写出对代码的优化过程. 简单题,流水线问题的变形: \(U.D.C\)是三条流水线,每次步进都要转换到别的流水线上,其中 \(U[i].D[i].C[i]\) 就是转换到对应类型的流水线的第 \(i\) 个元素的成本,求最小总成本 \(^{①}\) 假设 \(f(i)\) 为对前 \(i\)…
中等·Bamboo's Fight with DDLs II 分析 一句话:给定字符串,求最长回文子序列长度,动态规划LCS思想的进阶应用 具体思路如下: 对于任意字符串,如果头尾字符相同,那么字符串的最长回文子序列等于去掉首尾的字符串的最长子序列加上首尾:如果首尾字符不同,则最长回文子序列等于去掉头的字符串的最长回文子序列和去掉尾的字符串的最长回文子序列的较大者. 因此动态规划的状态转移方程为: 设字符串为str,长度为n,dp[i][j]表示第i到第j个字符间的回文子序列的最大长度(i<=j…
1119 AlvinZH's Fight with DDLs III 思路 难题,最小点覆盖. 分析题意,某一个任务,既可以在笔记本A的 \(a\) 模式下完成,也可以在笔记本B的 \(b\) 模式下完成.如果笔记本A处于x模式,那么所有可以在笔记本x模式的任务可以一起完成,B同理.这两句话作为题目核心,该如何转化呢? 对于每个任务对应的(a,b),我们把它映射到平面坐标当中,明显发现,此题和二营长,你他娘的意大利炮呢简直一模一样.其实就是一个最小点覆盖问题,也就是最大二分图匹配问题. 关于最小…
1117 AlvinZH's Fight with DDLs I 思路 简单题,动态规划. 本题与期末练习赛B题很相似,而且更为简单些.简化问题:在数字序列上取数,不能取相邻的数. DP数组定义,dp[i]:到达第i层所能取得的最大经验值.初始化:dp[0] = x[0], dp[1] = max(x[0], x[1]). 对于第 \(i\) 层,有两种选择:不打,等于 \(dp[i-1]\):打,等于 \(dp[i-2] + x[i]\).二者取最大值即可. 状态转移方程:\(dp[i] =…
1124 ModricWang's Fight with DDLs I 思路 这道题本质上就是一个多项式求值,题目中的n需要手动算一下,单位复根可以根据复数的性质来求,即\(e^{i\pi}+1=0\),对指数\(i\pi\)进行乘除就能得到各个单位复根,带进多项式即可得到答案.需要注意的是,这里的函数次数k很小,因此时间复杂度为\(O(k^2)\) 的朴素算法是完全没有问题的.如果k大一些,就可以使用FFT了,这个题的题面在做的其实就是求一次FFT.希望通过这一个题帮助大家巩固一下FFT的定义…
简单记录下题目类型和做题情况,理性复习同时也希望提供一些参考 题目描述 共计八个题目,按照助教的划分,题目分类如下 一个签到(二分查找),两个板子(活动选择.KMP(洛谷kmp模板题)),一个板子变形(KMP多次匹配) 四道中等:一个动态规划题目(稍微有些改变的原题,难受),一道结合了计网OSPF的网络流题目(应该是),一道圆的计算几何题目(两点在一圆外,计算两点的最近距离),最后一道忘了. 做题情况 做题情况就是,总人数二百多,做出四道题目的有一百多,后四道有十多位大佬做出了部分 我自己就是第…
1118 AlvinZH's Fight with DDLs II 思路 中等题,贪心. 理解题意,每次攻击中,可以使某个敌人生命值-1,自己生命值减去∑存活敌人总攻击力. 贪心思想,血量少攻击高的要先消灭,所以以A/L作为参数排序,即将所有的敌人根据A/L从大到小排序. 遍历一次,对于排序好的敌人,HP减去(总攻击*该敌人血量),总攻击减去该敌人攻击.代码如下: HP -= (sumA * H[i].L); sumA -= H[i].A; if(HP <= 0) break; 分析 贪心证明:…
G - 贪心 Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Description   Simon and Garfunkel Corporation (SG Corp.) is a large steel-making company with thousand of customers. Keeping the customer satisfied is one of…
1126 ModricWang's Fight with DDLs III 思路 由于题目中已经说明了时间经过了正无穷,因此初始位置是不重要的,并且每条边.每个点的地位是均等的.因此到达每个点的概率就是这个点的度数+1(可以停留就等于是有一条连向自己的边),最后的概率就是 \[\frac{\sum S中的点的度数}{\sum 所有点的度数}\] 时间复杂度\(O(m)\),空间复杂度\(O(m)\) 代码 #include <iostream> #include <set> #in…
1125 ModricWang's Fight with DDLs II 思路 圆内被划分部分数的计算方式如下: 圆内部的每一个交点都使得总份数增加了一:除此之外,每一根直线段最后抵达圆周时,总份数也增加了一. 因此: 总份数应该是 \(1+圆内部的交点数量+直线段的数量\) 直线段的数量等于 \(C_n^2\) 交点数量的求法需要一些思维量.可以把圆内部的每个交点看成是某个圆内接四边形的对角线交点,于是在n个点中,任意四个点的组合都对应了圆内部的某个交点.因此,交点数量等于 \(C_n^4\)…