<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[SwordHoly __传说中的圣剑，攻击力加250，ORZ！！]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/SwordHoly</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; SwordHoly]]></copyright><item><title><![CDATA[博客已搬家]]></title><link>https://blog.csdn.net/SwordHoly/article/details/6822966</link><guid>https://blog.csdn.net/SwordHoly/article/details/6822966</guid><author>SwordHoly</author><pubDate>Mon, 26 Sep 2011 17:06:54 +0800</pubDate><description><![CDATA[即日起该博客不再更新。
欢迎大家访问我的新博客：http://acm.nbu.edu.cn/SwordHoly/ ，欢迎大家跟我交换链接。]]></description><category></category></item><item><title><![CDATA[Dome of Tuxville [UVALive 3347] 模拟退火]]></title><link>https://blog.csdn.net/SwordHoly/article/details/6359246</link><guid>https://blog.csdn.net/SwordHoly/article/details/6359246</guid><author>SwordHoly</author><pubDate>Sun, 24 Apr 2011 19:36:00 +0800</pubDate><description><![CDATA[<br />题意：有n个楼，给定xy坐标和高度，有一个防护盾核心，以他为球心的半球内的都处于他的保护之下，求他的坐标，使得他需要覆盖全部楼的半径最小。<br />题解：<br />模拟退火。<br /> <br />第一个模拟退火，哈哈。<br />传统的模拟退火如果当前状态更有就接受，否则以一定概率接受，概率的存在保证不会跳进局部最优而出不来。<br />不过用概率搞貌似效果不是很好，然后就初始生成100组解，对着100组并行操作，只在更优的时候接受，这样每组解最后都会到达他所在区域的局部最优解，而全局最]]></description><category></category></item><item><title><![CDATA[Perfect Domination on Trees [UVALive 3346] 树形DP]]></title><link>https://blog.csdn.net/SwordHoly/article/details/6359231</link><guid>https://blog.csdn.net/SwordHoly/article/details/6359231</guid><author>SwordHoly</author><pubDate>Sun, 24 Apr 2011 19:15:00 +0800</pubDate><description><![CDATA[题意：给你一棵树，用黑白染色，求最少的染黑的个数，使得每个白点都与且只与1个黑点相连。
题解：    dp[x][f]表示将x染成f状态最少需要染多少黑点，f有三种状态:0,1,2    
0：表示该点为白色，且他的所有儿子都为白色。    
1：表示该点为黑色。    
2：表示该点为白色，且他有一个儿子为黑色。    
dp[x][1]=sigma(min(dp[son(x)][1],dp[son(x)][0]));    
dp[x][0]=sigma(dp[son(x)][2]);   ]]></description><category></category></item><item><title><![CDATA[Lego Bricks [2011 浙江省赛I题] 计算几何]]></title><link>https://blog.csdn.net/SwordHoly/article/details/6339397</link><guid>https://blog.csdn.net/SwordHoly/article/details/6339397</guid><author>SwordHoly</author><pubDate>Thu, 21 Apr 2011 18:19:00 +0800</pubDate><description><![CDATA[<br /> <br />省赛的时候没发现这道水题，发现了的话会毫不犹豫的上去写这道的，虽然估计也写不完，但至少算法是很清楚的。写完的时候都有300来行了= =！<br />题意：<br />给定n个园和m个线段,初始圆已经被固定住，要求把m个线段放上去，能否使m个线段都被固定。如果有线段已经被固定，这可以用这些线段来固定剩下的线段。<br />题解：<br />被固定的意思显然是重心被支撑住，可以有一半以上架在圆上，或者两端都有支撑点。<br />转化成算法就是把线段平均分成两段，如果两段都能被固定则整个]]></description><category></category></item><item><title><![CDATA[Awkward Lights [UVALive 5070] 高斯消元]]></title><link>https://blog.csdn.net/SwordHoly/article/details/6310444</link><guid>https://blog.csdn.net/SwordHoly/article/details/6310444</guid><author>SwordHoly</author><pubDate>Fri, 08 Apr 2011 19:40:00 +0800</pubDate><description><![CDATA[<br />题意:<br />  一个0/1矩阵,表示开关,0关,1开,按(i,j)这个开关后则跟他曼哈顿距离为d的开关改变状态.<br /> 问能否将改状态变为全0.<br />题解:<br /> 首先逆向思维,题目要求等价于将全0变为所求矩阵.<br />  然后对于每一个开关,要么按一次,要么不按,按两次以上等价于按了%2次,设未知数x(i,j)表示按1次或0次.<br />  则可以列n*m个方程:<br />   x(i,j)+sigma(x(ii,jj))=a[i][j]  (a[i][j]为给]]></description><category></category></item><item><title><![CDATA[Fire Drill [UvaLive 5064] BFS+0/1背包]]></title><link>https://blog.csdn.net/SwordHoly/article/details/6304710</link><guid>https://blog.csdn.net/SwordHoly/article/details/6304710</guid><author>SwordHoly</author><pubDate>Wed, 06 Apr 2011 15:10:00 +0800</pubDate><description><![CDATA[<br />  <=写成<<检查了好久= =!<br />题意:<br />  给你一个多层迷宫,每层迷宫有向上或者向下的楼梯,有些人被困在迷宫里面,每救一个人获得一定分数,不带人每走一格花费时间1,带人花费时间2,问在s秒内最多获得多少分数.<br />题解:<br />  关键是人跟人之间没影响,所以先BFS预处理出跟每个人的最短距离,然后距离*3即为就这个人的花费时间,做一遍0/1背包即可.<br /> <br />代码:<br />/*  * File:   main.cpp * Author: s]]></description><category></category></item><item><title><![CDATA[Just Sum It [UvaLive 5063]  DP+组合数]]></title><link>https://blog.csdn.net/SwordHoly/article/details/6304680</link><guid>https://blog.csdn.net/SwordHoly/article/details/6304680</guid><author>SwordHoly</author><pubDate>Wed, 06 Apr 2011 14:59:00 +0800</pubDate><description><![CDATA[<br />TLE到死,加了n多优化才过,泪流满面.<br />题意:<br />  给你a1,a2..a9,ai表示有ai个i,问用这些数字组成的不同的数的和MOD 1000000007以后是多少.<br />题解:<br />  首先方法显然:<br />       枚举位数,枚举某个数在哪个位上,假设有l位,数i在第j位上,则i在这个位上贡献的值为i*10^(j-1)*(剩下的数排列成l-1位的不同排列个数).<br />       在所有不同的位数下,所有数在不同位置上贡献的值求和即是所求结果.]]></description><category></category></item><item><title><![CDATA[HDU 3803 求线段交点]]></title><link>https://blog.csdn.net/SwordHoly/article/details/6289952</link><guid>https://blog.csdn.net/SwordHoly/article/details/6289952</guid><author>SwordHoly</author><pubDate>Wed, 30 Mar 2011 21:10:00 +0800</pubDate><description><![CDATA[搞了半天是long long的问题,用__int64就A了,貌似在杭电用long long都有问题的]]></description><category></category></item><item><title><![CDATA[HDU 3804 Query on a tree 非递归深搜 STL应用]]></title><link>https://blog.csdn.net/SwordHoly/article/details/6289167</link><guid>https://blog.csdn.net/SwordHoly/article/details/6289167</guid><author>SwordHoly</author><pubDate>Wed, 30 Mar 2011 16:14:00 +0800</pubDate><description><![CDATA[<br /><br />题意:<br /> 给定一颗树,边有权值,有q个查询,每次查询,x,y求1到x直接的所有不大于y的边的最大值.<br />题解:<br /> 离线,先读入所有查询,再深度遍历这棵树,遍历到一条边就把边的权值扔到set里,返回的时候再把这条边的权值删掉.<br /> 如果遍历到的当前点有询问,则对set进行upbounder,找到比当前y大的第一个位置,对迭代器--即可.<br />/* <br /> * File:   main.cpp<br /> * Author: swordho]]></description><category></category></item><item><title><![CDATA[POJ 3525 半平面交]]></title><link>https://blog.csdn.net/SwordHoly/article/details/6287139</link><guid>https://blog.csdn.net/SwordHoly/article/details/6287139</guid><author>SwordHoly</author><pubDate>Tue, 29 Mar 2011 20:58:00 +0800</pubDate><description><![CDATA[<br /><br />题意:<br />求凸包内切圆最大半径<br />题解:<br /> 二分半径,将凸包所有边往凸包内平移这么半径长度,看平移后是否能围成凸包.<br />/* <br /> * File:   main.cpp<br /> * Author: swordholy<br /> *<br /> * Created on 2011年3月25日, 下午7:56<br /> */<br />//求凸包内切圆最大半径<br />#include <cstdlib><br />#include <]]></description><category></category></item><item><title><![CDATA[Europe - Southwestern - 2006/2007 简明解题报告]]></title><link>https://blog.csdn.net/SwordHoly/article/details/6282142</link><guid>https://blog.csdn.net/SwordHoly/article/details/6282142</guid><author>SwordHoly</author><pubDate>Sun, 27 Mar 2011 21:01:00 +0800</pubDate><description><![CDATA[<br />A:<br />求N由每堆只能n^3,n*(2n+1)*(n+1)/6,构成的最少堆数,简单DP,先预处理所有结果,再读入一个输出一个,否则要超时.<br />B:<br />Undo<br />C:<br />并查集合<br />D:<br />网络流,对每个航班拆点,拆掉的两点间容量为航班人数,所有航班间满足时间条件和有公共位置连边,容量inf,超级源连起点,容量inf,终点连超级汇,容量inf.<br />E:<br />DP,注意数据里有空格,用scanf超时,cinWA,gets才是A]]></description><category></category></item><item><title><![CDATA[Tarjan算法拾遗]]></title><link>https://blog.csdn.net/SwordHoly/article/details/6277797</link><guid>https://blog.csdn.net/SwordHoly/article/details/6277797</guid><author>SwordHoly</author><pubDate>Fri, 25 Mar 2011 14:38:00 +0800</pubDate><description><![CDATA[<br />1.求割点的时候根节点为什么要特判?<br />  1->  2 -> 3<br />          /|/    |<br />           -----<br />弱1为根节点,dfn[1]=1,永远dfn[1]<=low[v],不特判的话根节点就永远是割点了.<br />但是当根节点只有一个儿子的时候他就不一定是割点了,所以只有跟节点有两个儿子以上才是割点.<br /> <br />2.求强连通的时候为什么要v在队列中才能跟新low[u]=min(low[u],dfn[v])?<]]></description><category></category></item><item><title><![CDATA[Trade HDU 3401 单调队列DP]]></title><link>https://blog.csdn.net/SwordHoly/article/details/6254298</link><guid>https://blog.csdn.net/SwordHoly/article/details/6254298</guid><author>SwordHoly</author><pubDate>Wed, 16 Mar 2011 18:07:00 +0800</pubDate><description><![CDATA[<br />题意:<br />  给定每天的股票买进上限,买进价格,卖出上限,卖出价格,每两次买卖操作中间必须间隔w天,每天最多持有maxp个股票,问n天后最大收益是多少<br />题解:<br />  DP方程显然:<br />    dp[i][j]=max(不买不卖,买入操作,卖出操作)<br /> 不买不卖<br />
   dp[i][j]=max(dp[i][j],dp[i-1][j])<br />
 买<br />
   dp[i][j]=max(dp[pre][k]-(j-k)*AP[]]></description><category></category></item><item><title><![CDATA[Cross the Wall HDU3669 斜率优化DP]]></title><link>https://blog.csdn.net/SwordHoly/article/details/6249040</link><guid>https://blog.csdn.net/SwordHoly/article/details/6249040</guid><author>SwordHoly</author><pubDate>Mon, 14 Mar 2011 18:38:00 +0800</pubDate><description><![CDATA[<br />纠结了近一个星期,泪奔~~<br />题意:<br />给你n个矩形,长宽已知,求用不超过k个大矩形包含所有给定矩形,使得大矩形总面积和最小.<br />题解:<br />  首先DP显然,有状态转移方程:dp[i][k]=min(dp[j][k-1]+w[j+1].y*w[i].x) (k-1<=j<=i-1)<br />
     令w[j+1].y=y,dp[j][k-1]=x,w[i].x=k;<br />
      yy=x+ky,求min yy<br />
      y=-]]></description><category></category></item><item><title><![CDATA[People like People ZJU 2682 强联通+记忆化搜索]]></title><link>https://blog.csdn.net/SwordHoly/article/details/6229670</link><guid>https://blog.csdn.net/SwordHoly/article/details/6229670</guid><author>SwordHoly</author><pubDate>Mon, 07 Mar 2011 16:57:00 +0800</pubDate><description><![CDATA[<br />题意:<br /> 给定一个有向图.<br /> 求一个最大的集合,是所有属于这个集合的点都满足以下条件:<br />1.出度不为0<br />2.指向的点都在这个集合内<br />3.有属于这个集合的点指向这个点<br />题解:<br /> 我的做法是:对图缩点后,枚举每个点,以这个点作起点,并且这个点是由大于等于2个点缩点而得到的,然后这个点为根,以他能访问到的点构成树,如果所有叶子都是大于等于两个点以上缩点得到的,则说明该树构成一个合法的集合.取最大的合法集合即可.<br />/*<br]]></description><category></category></item><item><title><![CDATA[KTX Train Depot  [UVAlive 4852]]]></title><link>https://blog.csdn.net/SwordHoly/article/details/6218973</link><guid>https://blog.csdn.net/SwordHoly/article/details/6218973</guid><author>SwordHoly</author><pubDate>Wed, 02 Mar 2011 19:34:00 +0800</pubDate><description><![CDATA[<br />题意:<br />   有很多火车会从东西两个方向进入轨道,进入时间小于0,出去时间大于0,问最少要多少轨道使得轨道之间不互相堵塞.堵塞是指一辆火车要往西另一辆要往东,两个互相堵塞都出不去,或者两个都向一个方向,但是在门口的出去时间比他的后面的出去时间晚.<br />题解:<br />  首先考虑一个方向的,比如都是从东进从东出,按进入时间排序是显然的,比方说按时间从小到大排,那么一辆火车想进入一个轨道的话它的出去时间必然要比已有轨道的出去时间小,否则堵塞了,然后他必定接在跟他时间最接近的轨道上]]></description><category></category></item><item><title><![CDATA[Tour Belt [UVALive 4848] 并查集+枚举边长]]></title><link>https://blog.csdn.net/SwordHoly/article/details/6218136</link><guid>https://blog.csdn.net/SwordHoly/article/details/6218136</guid><author>SwordHoly</author><pubDate>Wed, 02 Mar 2011 14:42:00 +0800</pubDate><description><![CDATA[<br />题目要求:<br />       求出满足以下两个条件的子图数:<br />       1.子图定点数大于等于2<br />       2.子图中的所有边都大于(所有子图外的(与子图中的点有公共点的的边的长))<br />题解:<br />   将边的长度离散化,从大到小枚举边长,每次统计最小边边长为枚举的边长的子图,累加即可.<br />/* <br />
 * File:   main.cpp<br />
 * Author: swordholy<br />
 *<br />
]]></description><category></category></item><item><title><![CDATA[Matrix Revolution BFS HDU 1759]]></title><link>https://blog.csdn.net/SwordHoly/article/details/6153223</link><guid>https://blog.csdn.net/SwordHoly/article/details/6153223</guid><author>SwordHoly</author><pubDate>Wed, 19 Jan 2011 17:39:00 +0800</pubDate><description><![CDATA[<br />题意：<br /> 对于给定的一个矩阵A，A+A^2+A^3+...+A^K 是多少呢？<br />
其中A^2 表示两个矩阵的乘积A*A，A^3表示三个矩阵的乘积A*A*A，依此类推。<br />求结果中的非0元素个数。<br />题解：<br />  逆向思维：平时一般都用矩阵来表示一个图，这里用图来表示一个矩阵。A^K中A[i][j]表示从在这个图上i走了K步后可达到j。<br />代码：<br />  /* <br />
 * File:   main.cpp<br />
 * A]]></description><category></category></item><item><title><![CDATA[Fix 状态压缩DP HDU 3362]]></title><link>https://blog.csdn.net/SwordHoly/article/details/6146624</link><guid>https://blog.csdn.net/SwordHoly/article/details/6146624</guid><author>SwordHoly</author><pubDate>Mon, 17 Jan 2011 13:02:00 +0800</pubDate><description><![CDATA[<br />题意：<br />给n个点（n<=18）,有些点固定了，有些点没固定。每个点都有坐标，目标是把所有点都固定住，一个未固定的点至少要跟两个点相连才算被固定。<br />题解：<br />由于n不大，所以可以用二进制位表示该点是否被固定，一遍DP即可。<br />代码：<br /><br />int main(int argc, char** argv)<br />{<br />    int i,j,m,x,y,sum;<br />    double l1,l2;<br />    while(]]></description><category></category></item><item><title><![CDATA[In Action 最短路加背包 HDU 3339]]></title><link>https://blog.csdn.net/SwordHoly/article/details/6146219</link><guid>https://blog.csdn.net/SwordHoly/article/details/6146219</guid><author>SwordHoly</author><pubDate>Mon, 17 Jan 2011 10:42:00 +0800</pubDate><description><![CDATA[<br />题意：<br />  AC大神要引爆核弹毁灭世界，他有n个电站，每个电站有一定电量，引爆需要至少一半的电量。<br /> 从原点0可以派出足够多的tank去占领，占领电站就能切断该电站对引爆核弹电量的供应。原点与电站之间构成一副无向带权图，权表示从一个点到另一个点tank的耗油量，求拯救世界需要最少的油耗。<br />题解：<br />  一遍最短路，算出占领每个点最少需要油耗。<br />  然后一个点有两个属性，油耗和电量，将油耗当重量，电量当价值，0/1背包即可。<br />代码：<br ]]></description><category></category></item></channel></rss>