<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[a18235146924的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/a18235146924</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; a18235146924]]></copyright><item><title><![CDATA[关于HDU-4373 Mysterious For 中结论的证明]]></title><link>https://blog.csdn.net/a18235146924/article/details/101716726</link><guid>https://blog.csdn.net/a18235146924/article/details/101716726</guid><author>a18235146924</author><pubDate>Tue, 27 Jun 2017 15:48:00 +0800</pubDate><description><![CDATA[题目链接
这个题本身是一个很简单的Lucas定理加上中国剩余定理，不过这个题的结论很有意思。题中给出了这种类型的嵌套循环：
for(int i=0;i&lt;n;++i)
    for(int j=i;j&lt;n;++j)
        for(int k=j;k&lt;n;++k)
            ...
也就是每一层循环都是从上一层循环的当前位置开始。结论是，循环上限为...]]></description><category></category></item><item><title><![CDATA[CodeChef-MOU2H Mountain Holidays 2 【DP】]]></title><link>https://blog.csdn.net/a18235146924/article/details/101716723</link><guid>https://blog.csdn.net/a18235146924/article/details/101716723</guid><author>a18235146924</author><pubDate>Tue, 25 Apr 2017 17:30:00 +0800</pubDate><description><![CDATA[题目链接
题意
有一座山，给出山中每一点的高度。现定义爬山的方法，可以从一个点传送到另一个点，也可以移动到相邻的一个点，但两种走法都必须向右。定义爬山的一个方案是爬山的过程中在相邻点移动时产生的高度差的序列。求爬山的不同方案数。
分析
将这个题的模型抽象出来，这个题就等价于：不相同子序列的计数问题
设数列为\(A[i]\)，状态
\[dp[i] \leftrightarrow 以A[i]...]]></description><category></category></item><item><title><![CDATA[CodeChef-ANDMIN Range Minimum Queries 【线段树】]]></title><link>https://blog.csdn.net/a18235146924/article/details/101716722</link><guid>https://blog.csdn.net/a18235146924/article/details/101716722</guid><author>a18235146924</author><pubDate>Sat, 22 Apr 2017 17:52:00 +0800</pubDate><description><![CDATA[题目链接
题意
对数列进行RMQ操作，同时要求支持一种修改操作：将L到R间的所有数A[i]变成A[i]&amp;X。
分析
关键是如何对线段树的更新操作进行优化。首先因为按位与操作并不能直接影响一个区间的性质，因此也就没有很好的方法用懒标记来记录。但是考虑按位与操作本身的性质，与操作的操作数中只有为0的位才会对原数可能造成影响，而若原数该位本身就为0则不会造成影响。因此我们可以以此性质判...]]></description><category></category></item><item><title><![CDATA[关于《训练指南》中的“翻棋子游戏”]]></title><link>https://blog.csdn.net/a18235146924/article/details/101716721</link><guid>https://blog.csdn.net/a18235146924/article/details/101716721</guid><author>a18235146924</author><pubDate>Fri, 21 Apr 2017 21:26:00 +0800</pubDate><description><![CDATA[刘汝佳的《训练指南》组合游戏部分中写了“翻棋子游戏”这样一个问题：一个棋盘上每个格子有一个棋子，每次操作可以随便选一个朝上的棋子(x,y)，代表第i行第j列的棋子，选择一个形如(x,b)或(a,y)(其中b &lt; y，a &lt; x)的棋子，然后把它和(x,y)一起翻转，无法操作的人输。
对于该问题，书上的分析如下：把坐标为(x,y)的棋子看成大小分别为x和y的两堆石子，则本题转化...]]></description><category></category></item><item><title><![CDATA[CodeForces-796E Exam Cheating 【DP】]]></title><link>https://blog.csdn.net/a18235146924/article/details/101716720</link><guid>https://blog.csdn.net/a18235146924/article/details/101716720</guid><author>a18235146924</author><pubDate>Wed, 12 Apr 2017 18:48:00 +0800</pubDate><description><![CDATA[题目链接
题意
在两个数轴上有一些整数（n&lt;1000），用p个（p&lt;1000）个长度小于等于k（k&lt;=50）的区间去覆盖这些整数，求最多多少个整数能够被覆盖（相同的不重复计数）
分析
易想到这个四维DP的状态：
\[dp[n][p][r1][r2] \leftrightarrow 到n用了p个区间，上面覆盖的最后一个区间的长度为r1，下面的覆盖的最后一个区间的长度为r2...]]></description><category></category></item><item><title><![CDATA[ZOJ-3953 Intervals 【贪心】]]></title><link>https://blog.csdn.net/a18235146924/article/details/101716719</link><guid>https://blog.csdn.net/a18235146924/article/details/101716719</guid><author>a18235146924</author><pubDate>Mon, 10 Apr 2017 20:56:00 +0800</pubDate><description><![CDATA[题目链接
题意
给N个区间，删掉其中一些区间，使得不存在任何三个互相相交区间。求删掉区间的最少数量以及哪些区间。
分析
贪心思路：先将所有区间按左端点从小到大排序（右端点无所谓）。选择当前左端点最小的三个区间，如果互相相交，删除右端点最大的区间；若不互相相交，将其中右端点最大的两个区间再与下一个区间进行判断。
正确性分析：由于是从左到右扫描，当前三个相交，去掉右端点最大的能够最大的减少对...]]></description><category></category></item><item><title><![CDATA[ZOJ-3956 Course Selection System【0-1背包】]]></title><link>https://blog.csdn.net/a18235146924/article/details/101716718</link><guid>https://blog.csdn.net/a18235146924/article/details/101716718</guid><author>a18235146924</author><pubDate>Mon, 10 Apr 2017 19:29:00 +0800</pubDate><description><![CDATA[题目链接
题意
有n种课可供选择，每一种课有一个H值(1&lt;=H&lt;=10000)和C值(1&lt;=C&lt;=100)，每种课只能选一次。现要求选一些课使得下式的值最大：
\[(\sum^m_{i=1}H_{x_i})^2-(\sum^m_{i=1}H_{x_i}) \times (\sum^m_{i=1}C_{x_i})-(\sum^m_{i=1}C_{x_i})^2 \]...]]></description><category></category></item><item><title><![CDATA[HDU-3045 Picnic Cows 【DP+斜率优化】]]></title><link>https://blog.csdn.net/a18235146924/article/details/101716715</link><guid>https://blog.csdn.net/a18235146924/article/details/101716715</guid><author>a18235146924</author><pubDate>Sat, 11 Mar 2017 16:31:00 +0800</pubDate><description><![CDATA[题目链接



题意

有N只奶牛，每只奶牛有一个满意度，如果把一些奶牛分到一个组内，那么这些奶牛的满意度都会下降到组中满意度的最小值。现在规定每个组至少T只奶牛，求总的满意度变化的最小值



分析

从这个题中我学到了斜率DP中规定了转移距离的最小值时的处理方法（也就是i必须从小于等于i-T的状态转移而来） 
状态不难想出，先对奶牛的满意度排个序，设dp[i]为前...]]></description><category></category></item><item><title><![CDATA[HDU-3480 Division 【DP+斜率优化（二维）】]]></title><link>https://blog.csdn.net/a18235146924/article/details/101716716</link><guid>https://blog.csdn.net/a18235146924/article/details/101716716</guid><author>a18235146924</author><pubDate>Sat, 11 Mar 2017 15:26:00 +0800</pubDate><description><![CDATA[题目链接



题意

定义一个集合的花费是这个集合中的最大值减最小值的平方。然后给定一个集合S，求对这个集合的一个覆盖，使得所有子集的花费和最小。



分析

本身这个题是非常简单的，只是今天看了别人的题解，我发现我以前写的二维斜率优化都写复杂了。直接外层循环用未被优化的那一维就行了，不用像我以前那样维护一个k维的单调队列……我说怎么不对劲，每次看别人的代码都那么...]]></description><category></category></item><item><title><![CDATA[POJ-1180 Batch Scheduling 【逆向DP+斜率优化】]]></title><link>https://blog.csdn.net/a18235146924/article/details/101716631</link><guid>https://blog.csdn.net/a18235146924/article/details/101716631</guid><author>a18235146924</author><pubDate>Sun, 05 Mar 2017 15:21:00 +0800</pubDate><description><![CDATA[题目链接



题意

一台机器有N个物品要处理，每个物品的处理时间是Ti，花费系数是Fi，可以把这N个物品分包处理，打包需要花费时间S，机器每处理完一包物品就会把当前时间显示出来（刚开始处理时时间为0），那么这包中每个物品的花费就是显示的这个时间乘以其花费系数。求处理完所有物品的最小花费。



分析

朴素的想法设状态为处理前i个物品的最小花费，但是单考虑前i个物...]]></description><category></category></item><item><title><![CDATA[HDU-2829 Lawrence 【斜率优化DP】【四边形不等式优化】]]></title><link>https://blog.csdn.net/a18235146924/article/details/101716711</link><guid>https://blog.csdn.net/a18235146924/article/details/101716711</guid><author>a18235146924</author><pubDate>Sun, 26 Feb 2017 15:31:00 +0800</pubDate><description><![CDATA[题目链接



题意

背景故事大概是说一战时一个英国间谍Lawrence要指挥突击队去炸毁奥斯曼帝国的一些铁轨。铁轨上有n个火车站，按线性排列，每个火车站上有一个权值，最后整个铁路的价值就是每一段联通铁路段上的火车站权值两两相乘的和加起来（联通段上只有一个车站就是0）。Lawrence有m次炸毁两个车站之间铁路的机会，求Lawrence最终可以使得这段铁路价值变成的...]]></description><category></category></item><item><title><![CDATA[POJ-1260 Pearls 【DP】]]></title><link>https://blog.csdn.net/a18235146924/article/details/101716712</link><guid>https://blog.csdn.net/a18235146924/article/details/101716712</guid><author>a18235146924</author><pubDate>Sat, 25 Feb 2017 15:25:00 +0800</pubDate><description><![CDATA[题目链接



题意

某公司需采购c种珍珠，知道每种珍珠的价格和需要的量。购买时，若要买某种珍珠，需额外支付10个该种珍珠的价钱。同时价格低的珍珠可以用价格高的珍珠代替。求最少能花多少钱完成采购。



分析

解决本题关键要想到这一点：

若第i种珍珠可以被第j种珍珠代替（i&lt; j且珍珠价格递增），则第i~j-1种珍珠都应当被第j种珍珠代替。

证明很简单，...]]></description><category></category></item><item><title><![CDATA[CodeForces 449D Jzzhu and Numbers 【DP+容斥】]]></title><link>https://blog.csdn.net/a18235146924/article/details/101716710</link><guid>https://blog.csdn.net/a18235146924/article/details/101716710</guid><author>a18235146924</author><pubDate>Thu, 19 Jan 2017 15:06:00 +0800</pubDate><description><![CDATA[题意

给定一个n元集，元素为ai，求其有多少个子集，使得其中的元素ai1,.....aik满足 
ai1&amp;ai2&amp;⋯&amp;aik=0 
(1⩽n,a⩽106)



分析

要是n和a的范围小一些自然可以直接用01背包做，然而这里a与n都达到了1e6的范围，则要另寻他法。 
先求有多少种情况使得与出来的结果不为0，考察有多少元素在某些二进制位上为...]]></description><category></category></item><item><title><![CDATA[CodeForces-450E Jzzhu and Apples 【数学+贪心构造】]]></title><link>https://blog.csdn.net/a18235146924/article/details/101716708</link><guid>https://blog.csdn.net/a18235146924/article/details/101716708</guid><author>a18235146924</author><pubDate>Thu, 19 Jan 2017 10:41:00 +0800</pubDate><description><![CDATA[题意

将1到n的数分成不互质的数对，问最多能分出多少对？



分析

贪心构造，先打出小于等于n的所有素因子，从最大的素因子开始（因为越大的因子，在数列中的倍数越少），两两匹配其倍数。若刚好是奇数个，则将其2倍留下，因为若能匹配出至少一对，其二倍必在数列中，同时，其二倍除了其本身以外必然只有2这个因子，最后组合2的倍数时，必然可以将其考虑进去。



AC代码

...]]></description><category></category></item><item><title><![CDATA[HDU 5800 To My Girlfriend 【DP】]]></title><link>https://blog.csdn.net/a18235146924/article/details/101716709</link><guid>https://blog.csdn.net/a18235146924/article/details/101716709</guid><author>a18235146924</author><pubDate>Thu, 19 Jan 2017 10:04:00 +0800</pubDate><description><![CDATA[题意

有n个物品，每个物品的重量是ai，求以下式子： 
∑ni=i∑nj=1∑nk=1∑nl=1∑sm=1f(i,j,k,l,m)(i≠j≠k≠l) 
其中f(i,jk,l,m)表示在所有物品中必选i和j，且必不选k和l，重量总和为m的选法总数。



分析

设状态dp[i][j][x][y]为选到第i个数时，总重量为j，必选了x个和必不选y个的选法总数。则在这个...]]></description><category></category></item><item><title><![CDATA[HDU 5726 GCD 【GCD】【ST表+二分】【线段树+暴力枚举】]]></title><link>https://blog.csdn.net/a18235146924/article/details/101716707</link><guid>https://blog.csdn.net/a18235146924/article/details/101716707</guid><author>a18235146924</author><pubDate>Tue, 17 Jan 2017 19:35:00 +0800</pubDate><description><![CDATA[题意

给一串数列，求区间GCD和整个数列中与该区间GCD相等的区间数



分析

首先区间GCD易求，用能求RMQ的方法都可以，比如ST表、线段树。关键是如何求第二个问题，这里有两种做法： 
方法一 
利用GCD的性质，若固定区间左端点，增大右端点，区间GCD必然非递增。因此我们可以遍历区间左端点，用二分求出以该端点起始的区间的所有gcd的情况及其对应的区间个数，...]]></description><category></category></item><item><title><![CDATA[HDU 3401 Trade 【DP+单调队列优化】]]></title><link>https://blog.csdn.net/a18235146924/article/details/101716705</link><guid>https://blog.csdn.net/a18235146924/article/details/101716705</guid><author>a18235146924</author><pubDate>Mon, 16 Jan 2017 23:32:00 +0800</pubDate><description><![CDATA[题意

给出接下来T天每天卖出、买入股票的价格，每天买入、卖出的上限，持有的股票的总上限，并且两次股票操作之间有时间间隔，求T天之后最多能赚多少钱。

分析

很容易可以写出状态转移方程： 
dp[i][j]↔第i天持有j的股票能获得的最大利益 
dp[i][j]=max(dp[i−1][j],max(dp[pre][j+k]+BP[i]∗k),max(dp[pre]...]]></description><category></category></item><item><title><![CDATA[POJ 3017 Cut the Sequence 【DP+单调队列优化+平衡树】]]></title><link>https://blog.csdn.net/a18235146924/article/details/101716706</link><guid>https://blog.csdn.net/a18235146924/article/details/101716706</guid><author>a18235146924</author><pubDate>Mon, 16 Jan 2017 10:14:00 +0800</pubDate><description><![CDATA[题意

给定一串数列，要求把它划分成一些小段，每个小段的和不超过M，找到一种分段方法使得每一段的最大值的和最小，求这个最小值



分析

易得转移方程 
dp[i]=min(dp[k]+max(num[k+1],⋯,num[i])) 
其中∑ij=k+1num[j]&lt;=M，朴素的做法显然是O(n2)的。观察可得dp数组是递增的，然后对于一个确定的分段最大值，以...]]></description><category></category></item><item><title><![CDATA[CodeForces 342D Xenia and Dominoes 【DP+容斥】]]></title><link>https://blog.csdn.net/a18235146924/article/details/101716704</link><guid>https://blog.csdn.net/a18235146924/article/details/101716704</guid><author>a18235146924</author><pubDate>Sun, 27 Nov 2016 16:46:00 +0800</pubDate><description><![CDATA[题目链接



题意

在一个3*n的桌子上放一些1*2的多米诺骨牌（横竖放都可以），桌子上有一些不能放置的格子，除了这些不能放置的格子以外，还要求一个指定的格子不能被多米诺骨牌覆盖，同时这个空位可以通过移动附近的骨牌来转移到其他地方，剩下的格子要被全部覆盖，求放置的种数。



分析

先不管哪个预留的空位，对于一个已知的棋盘，一列一列转移状态。设状态： 
dp[i...]]></description><category></category></item><item><title><![CDATA[HDU 4348 To the moon 【主席树+区间修改】]]></title><link>https://blog.csdn.net/a18235146924/article/details/101716633</link><guid>https://blog.csdn.net/a18235146924/article/details/101716633</guid><author>a18235146924</author><pubDate>Wed, 16 Nov 2016 00:25:00 +0800</pubDate><description><![CDATA[persistent segment tree  
题目链接



题意

给一串初始序列An，并且初始的时间是0，定义以下操作： 
1. 给一个区间内的数加上一个值，并且时间加一 
2. 查询当前某区间的区间和 
3. 查询过去某个时间的某个区间和 
4. 回到某个时间

序列大小和查询数量级为1e5



分析

SPOJ上也有这个题，但HDU卡内存严格一些，所以...]]></description><category></category></item></channel></rss>