关闭

poj3254:Corn Fields(状压DP)

传送门题意: 有一片n∗mn*m的土地(n≤12,m≤12)(n\le 12 ,m \le 12),有些格子可以放牛,但要求放牛的格子不能相邻,求有多少种放牛方案。题解: 首先O(n∗(2m)∗(2m))O(n * (2^m)*(2^m))次方的DP很好想,但是要超时,考虑优化: 1.无用状态很多,先把所有有用状态预处理。判断有用状态:status1⊕(status1<<1)==0status...
阅读(9) 评论(0)

Codeforces Round #440 Div. 2 E:Points, Lines and Ready-made Titles

传送门题意: 给n个点,可以过每个点做x轴垂线,平行线,问一共多少种不同图像。题解: (直接copy官网的吧,下面有翻译): Let’s build graph on points. Add edge from point to left, right, top and bottom neighbours (if such neigbour exist). Note that we can...
阅读(14) 评论(0)

NOIP模拟:长跑路径(Dijkstra)

企鹅豆豆即将要去考长跑了,但是作为一只企鹅,长跑自然比不过鸵鸟和鸡。为了公平起见,教练告诉豆豆,他可以从 K 个指定地点中选择两个不同的地点分别作为起点和终点来考试。 考试地图是一个由 N 个点 M 条边组成的没有重边和自环的连通无向图,一条边的长度为 Ai 。 豆豆想知道他的长跑考试最少需要跑多远。 即求一个图中给定点对的最近路径。题解: 考试的时候乱搞了一个类似SPFA的做法更新每...
阅读(42) 评论(1)

BZOJ1260:[CQOI2007]涂色paint(区间DP)

传送门 假设你有一条长度为5的木版,初始时没有涂过任何颜色。你希望把它的5个单位长度分别涂上红、绿、蓝、绿、红色,用一个长度为5的字符串表示这个目标:RGBGR。 每次你可以把一段连续的木版涂成一个给定的颜色,后涂的颜色覆盖先涂的颜色。例如第一次把木版涂成RRRRR,第二次涂成RGGGR,第三次涂成RGBGR,达到目标。 用尽量少的涂色次数达到目标。 题解:区间DP感觉gyr神犇讲得非常透彻。考...
阅读(36) 评论(0)

BZOJ4380: [POI2015]Myjnie(区间DP)

传送门 有n家洗车店从左往右排成一排,每家店都有一个正整数价格p[i]。 有m个人要来消费,第i个人会驶过第a[i]个开始一直到第b[i]个洗车店,且会选择这些店中最便宜的一个进行一次消费。但是如果这个最便宜的价格大于c[i],那么这个人就不洗车了。 请给每家店指定一个价格,使得所有人花的钱的总和最大。 题解:区间DP好题。 首先观察数据可以知道这个DP肯定是n2mn^2m或者n3...
阅读(32) 评论(0)

HDU2476:String painter(区间DP)

传送门题意: 给两个字符串,每次操作可以将第一个字符串的一段连续区间染成一个字母,求将第一个字符串染成第二个字符串的最小步数。题解:区间DP首先考虑:如果将原串看做一个空串进行DP,统计答案时只需要扫一遍,并对该位不染色的情况进行判断找最小值即可(若染色则等同于空串)。考虑空串的DP: 若一个区间[l,r][l,r]的ch[l]==ch[r]ch[l]==ch[r]那么答案可以减一,因为先染[l...
阅读(34) 评论(0)

HDU4745:Two Rabbits(区间DP)

传送门题意: 两只兔子,在n块围成一个环形的石头上跳跃,每块石头有一个权值ai,一只从左往右跳,一只从右往左跳,每跳一次,两只兔子所在的石头的权值都要相等,在一圈内(各自不能超过各自的起点,也不能再次回到起点)它们最多能经过多少个石头(1 <= n <= 1000, 1 <= ai <= 1000)。题解:区间DP 首先分为两种情况: 1.两兔子在同一位置起跳。 2.两兔子在不同位置起跳。...
阅读(47) 评论(0)

NOIP模拟:分玩具(博弈论)

豆豆和豆沙正在分一些玩具,每个玩具有一个好玩值,每个人可以拿走任意数量的玩具,获得的愉快度为最小的好玩值。现在豆豆先拿,每个人轮流操作,直到没有玩具可以拿。豆豆想知道他能比豆沙多出多少愉快度? 题解: 首先题意可以转化为一个有序数组分成n段分别加减加减依次进行,然后考虑dp,因为要满足最优子结构,所以从前往后用dp[i]dp[i]表示从i开始最大贡献,每次dp减去前面最小的(因为两个人都很聪明)。...
阅读(48) 评论(1)

poj1912:A highway and the seven dwarfs(凸包)

传送门题意: 给出平面上的N个点,对于M条直线,依次判断这N个点是否在每条直线的同一侧。是输出GOOD,不是输出BAD。题解: 凸包+二分。首先构造出凸包,之后对于一条直线,找出其两条平行线,这两条平行线在凸包上是切线,再判断相切的两个点构成的线段是否与直线相交就行了。#include #include #include #include<cstdio...
阅读(48) 评论(0)

HDU1007:Quoit Design(分治)

传送门题意: 求平面上的最近点对。题解: 分治。 把当前序列(l,r)分成(l,mid),(mid+1,r)。处理完两边之后保证两边y单调,同时记录全局最优值,考虑合并: 对于左右点只考虑y坐标小于它且距离分治中心不超过全局最优值的,可以证明只有最多4个点。可以看做O(1)O(1),那么总时间复杂度为O(nlogn)O(n\log n) #include #include<...
阅读(43) 评论(0)

poj3845:Fractal(坐标旋转)

传送门题意: 给一条折线,每一次操作把这条折线的所有线段变换成跟这条折线的相同形状,重复d次。问此时从头到尾走全长的f(0≤f≤1),将停在哪个点上。题解: 首先计算出每次变换线段增长的倍数kk,那么线段会增长kdk^d若当前线段增长后已经超出了所剩余的长度,就相当于确定变换后的直线在当前线段上,那么递归k−1k-1确定下一次变换的直线。 要注意每次变换后坐标需要旋转,这个预处理就好了。#in...
阅读(90) 评论(0)

BZOJ1914: [Usaco2010 OPen]Triangle Counting 数三角形(极角排序)

传送门题意: 给n个点,求组成的所有三角形中包含原点的三角形的个数。题解: 可转化为不包含原点的个数,观察发现这种三角形的三个顶点一定在经过原点直线的一侧,直接扫一遍就好了。#include using namespace std; typedef long long ll; struct IO{ streambuf *ib,*ob; inline...
阅读(34) 评论(0)

HDU4773:Problem of Apollonius(圆的反演)

传送门题意: 给两个相离的圆,和圆外的点,求过这个点与两圆外切的所有圆。题解:圆的反演 考的是数学啊。。不过向量很好做。首先推荐看看圆的反演入门知识:http://blog.csdn.net/acdreamers/article/details/16966369有两点个人觉得很重要,由于本人太辣鸡不会证明,就做了两个gif图。 (CSDN不能放高清图,凑合凑合看吧。。。) 1.当两圆外切时,...
阅读(28) 评论(0)

BZOJ1975: [Sdoi2010]魔法猪学院(A*)

传送门题意: 求k短路。题解: 标准A*,先从终点SPFA,保证估价函数的正确。(感觉这个复杂度很不科学。。)#include #include using namespace std; using namespace __gnu_pbds; typedef pair pid; co...
阅读(37) 评论(0)

BZOJ1249:SGU277 HERO 动态凸包(set)

传送门题意: 维护一个凸包,支持动态加点。题解: set维护上下凸包,代码稍微有点麻烦。注意设置比较函数的时候上下凸包应该一样,才能保证正确的弹出。#include using namespace std; typedef long long ll; struct IO{ streambuf *ib,*ob; inline void init(){...
阅读(43) 评论(1)

BZOJ2391:Cirno的忧郁(无旋Treap+三角剖分)

传送门题意: 给n个点,m个物品,每个物品有一个权值,求从这n个点中选出若干点能圈住的物品权值和。n≤2000,m≤2000n\le 2000,m\le 2000题解: 先预处理n个点两两点对与原点组成的三角形能圈住的物品总和sum[i][j]sum[i][j](顺时针为正,逆时针为负)。然后就可以用求多边形面积的经典方法求解,主要是怎么处理第一部分:观察可得,按到原点的极角排序后,两点能圈住的...
阅读(46) 评论(0)

BZOJ3564: [SHOI2014]信号增幅仪(最小圆覆盖)

传送门题意: 求一个固定半长轴方向和半长轴半短轴比值的最小椭圆覆盖平面上所有点。题解: 最小圆覆盖。 首先将坐标旋转,再把所有横坐标除以比值得到最小圆覆盖的经典模板。最小圆覆盖的做法: 首先,在已经确定最小圆的点集中加入一个在最小圆外面的点,那么这个点一定在新点集的最小圆上。算法: 初始化圆形为p1p_1,半径为r1r_1 1.从左到右依次加入点,若在当前圆内则跳过,否则问题转化为在一个...
阅读(81) 评论(0)

Codeforces Round #439 (Div. 2) E:The Untended Antiquity(Hash+二维树状数组)

传送门题意: 给一个n∗mn*m的网格,每次可以选定一个矩形,在他周围放置一个障碍(围栏),或者清楚一个障碍,障碍之间不相交,支持任意时刻询问两点是否被隔开。题解: 首先矩形不相交可以知道两点如果不能互相到达一定是在不同的障碍里,考虑对每个障碍赋一个Hash值,用二维树状数组差分维护,查询直接查前缀和就好了。#include using namespace std;...
阅读(131) 评论(0)

BZOJ4337: [BJOI2015] 树的同构(Hash)

BZOJ4337...
阅读(42) 评论(0)
174条 共9页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:19418次
    • 积分:1875
    • 等级:
    • 排名:千里之外
    • 原创:167篇
    • 转载:5篇
    • 译文:1篇
    • 评论:19条