随笔分类 - 2012-Multi
摘要:这题是记忆化搜索很容易想到,但状态却不好设dp[i][j][u][d][l][r][k]。对于矩形为i*j,它的四周的颜色分别为u,d,l,r,横竖切的状态为k的种数。其中要注意一个问题是,停止不一定是不可进行,而是随时都可以停止,这样就会有一种涂色为对某个矩形而言只涂一种颜色。那么,就必定会有重复...
阅读全文
摘要:方程很简单p[i][j] = min{dp[i-1][k] + |pos[i-1][k] - pos[i][k]|} + v[i][j];循环求值肯定TLE,主要是绝对值不方便。好吧,我真的BI了狗了,竟然想不到怎么样去绝对值。F,只要从左到右dp一次,再从右往左dp一次,不就好了吗?????F。当...
阅读全文
摘要:题意很好理解。由于点是可以重复到达的,但可能每次经过路径的标志不一样,所以可以设每个点有四种状态"L”,'O','V','E'。然后按这些状态进行求最短路,当然是SPFA了。#include #include #include #include #include #define LL __int64...
阅读全文
摘要:1 #include 2 #include 3 #include 4 #include 5 #include 6 #define LL __int64 7 using namespace std; 8 9 LL dp[25][1>=1;27 }28 return ret...
阅读全文
摘要:只能说感觉是三分吧,因为两端值肯定是最大的,而中间肯定存在一点使之最小,呃,,,,猜 的。。。#include #include #include #include #include #define LL __int64using namespace std;const int N=50050;do...
阅读全文
摘要:看了题解那个弱化版后,马上就去做了HDU 3333这道题,发现有可用的地方。于是往这方面想,主要是处理如何确定一个数出现K次的问题。想到了从左往右把每个数出现的次数记下来,但感觉不是这样,呃,再看别人做的,真的是这样的--!主要是处理一个数出现K次后的情况,把每个数出现的位置记录下来,当出现大于等于...
阅读全文
摘要:这道题写起来没难度,但这种题确实很难,这种字符串的题难在证明。以后也要注意。奇偶性不同的字符串肯定不能转换,因为每一次交换都是字符串的和增加2。当字符串长度为2时,可以模拟交换,最多26次。否则,任选三个字母(x1,x2,x3)->(x1+1,x2,x3+1)......(1)而且还有(x1,x2,...
阅读全文
摘要:思路是在看电视时突然想到的。枚举区间,然后按树形DP来选择最大值看是否满足条件。但枚举区间时的方法低效,看了题解,说枚举区间可以设两个指针逐步移动,开始 l = r = 1, 记录已经出现的国家。判断是否满足条件。如果满足,更新答案,更新区间出现的国家,l++, 一直到不满足。如果不满足,更新区间出...
阅读全文
摘要:利用分式的性质可以很容易证明要求的是个三角形,这很简单。对于求三角形内的雷的个数,只需求出每条边上方有多少个雷,作一点运算即可。如A,B,C(B是X轴坐标在中间的点),则AC(其上方的雷的个数)-AB-BC即可。 1 #include 2 #include 3 #include 4 #incl...
阅读全文
摘要:求某区间各个子集的和的根的最大的五个数。子集根其实就是这个数模9后的余数,注意的是要区分0和9,两者的余数都是0。、记录前i个数的和的根,设为sum数组,然后处理两个数组lft[i][j]表示从i开始往右,最先sum出现根为j的位置。rht[i][j]表示从i开始往左,最先sum开始出现根为j的位置...
阅读全文
摘要:最近这些天,确实很烦恼。因为发现自己好像无论怎么样努力,也赶不上那些强校的学生。不得不承认,我们是传统弱校了。停了有一周了,什么也不想写,不停的反思,到底自己在哪里比不上人。D说,那是因为自始至终你只有一个人在做,而人家是三个人。是吗?确实有点,自始至终只有一个人在训练,但不过是因为我明白,别人是不...
阅读全文
摘要:好题一道啦。做这题时,抓住两个问题:一、给某点染色时,其连通的点是否已有一点以全部代价染色。二、该点染什么颜色。嗯。第二个问题很容易,但第一个问题不容易了。我一开始就考虑祖父子三层结点的关系,认为在父结点时,要么子结点已染色,要么父结点已染色%#……*&¥%#……很复杂。。。。这是条件定得过于严格了...
阅读全文
摘要:想了好久,没思路。看别人说是卢卡斯,就去看卢卡斯了,看完卢卡斯,再用它推导一下,很容易就知道,答案是2^n的二进制中一的个数。改天找个时间写个卢卡斯的总结。~~~今晚竟然要上形势政治课,靠。。。。#include #include #include #include using namespace ...
阅读全文
摘要:细心点想,就明白了,题目是求和为N的各数的最小公倍数的种数。其实就是求N以内的各素数的不同的组合(包含他们的次方),当然,是不能超过N的。用Dp能解决。和背包差不多。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #def...
阅读全文
摘要:先确定M的大致范围后即可求。#include #include #include #include #include #define LL __int64#define N 60000LL square[N];LL spre[N];void init(){ spre[0]=0; spre[0]=0;...
阅读全文
摘要:分组背包而已。注意的是,每个时间T,要把一组的全加进去比较一次。#include #include #include #include #include #define N 205#define T 41000using namespace std;int dp[T];struct node{ in...
阅读全文
摘要:其实不过是大整数分解。。。注意两点:注意L 不能==N但是,N却可以是素数。。。囧#include #include #include #include #define LL __int64#define MAX 1LL>=1; a=(a>=1; } LL x=quick(a,m,n); if(x...
阅读全文
摘要:二分加贪心,水过了。贪心是因为,不能存在覆盖,当存在覆盖时,留小坐标的。#include #include #include #include #define N 300100using namespace std;struct Point{ int left,right;}pl[N];int qu...
阅读全文
摘要:利用降幂公式。。呃,还是自己去搜题解吧。知道降幂公式后,就不难了。#include #include #include #include #define LL unsigned long long using namespace std;bool mod[100005];LL PHI(LL P){ ...
阅读全文
摘要:本来以为是一道水题,好吧,做了才知道,出题的人有多牛。二分搜索是不可能的了,因为会超内存。。。看到别人的搜索两个集合的提示,我就自己一边去想了。终于想出来了:可以这样做,先把每两个集合的和值枚举出来并成一个大集合,排序,去重。剩下一个集合,于是,共三个集合。枚举小的那个集合的元素,搜索两个大的集合。...
阅读全文

浙公网安备 33010602011771号