03 2018 档案
摘要:题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1072 数字串最多只有10位,所以考虑用状压; 压缩的状态是哪些数字被用过,这样可以从一种状态加一个数字转移到另一种状态; 求能整除一个数的个数,那么当然记录当前状态下mod该数的余数,则在一种
阅读全文
摘要:题目:https://www.luogu.org/problemnew/show/P2530 太弱了不会用DP,于是暴搜; 每次传进一个数组c记录当前状态各种物品有多少个,枚举取哪种物品,返回最小值,外加记忆化; 因为各种愚蠢小错误WA了好久。 代码如下:
阅读全文
摘要:题目:http://poj.org/problem?id=3177 找桥,缩点,总之都是板子; 对于每个叶子,互相连一条边即可;若最后剩下一个,则去和根节点连边; 所以叶子节点数+1再/2即答案。 代码如下:
阅读全文
摘要:题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1055 区间DP,注意初始化!! 因为没记忆化,TLE了一晚上,区间DP尤其要注意不重复递归!!!!! 代码如下:
阅读全文
摘要:题目:http://poj.org/problem?id=3208 数位DP,首先按位数预处理出每一种位数的情况,包括有多少个魔鬼数和有多少个以6开头的非魔鬼数,以便递推、累加等等; 然后先找出第X个魔鬼数的位数,再一位一位从0开始填数; 写法有些技巧,详见代码及注释。 代码如下:
阅读全文
摘要:题目: 首先按限制高度从小到大排序,不会影响可行解,而不排序可能卡掉正确的情况; 用%2滚动数组时一定注意每次复制上一种情况,因为这个WA了好几次。 代码如下:
阅读全文
摘要:题目:http://www.joyoi.cn/problem/tyvj-1659 想清楚了是非常简单的最小生成树: 1、树中每条边都会被走两边; 2、每个点会走度数遍,起点又多走一遍; 根据以上两条处理边权,即输入的边权*2+两边点的点权,这样每个点都被加了度数遍; 再求最小生成树,答案加上点权最小
阅读全文
摘要:题目:http://poj.org/problem?id=3422 最大费用最大流: 拆点,在自点之间连两条边,一条容量为1,边权为数字;一条容量为k-1,边权为0;表示可以走k次,只有一次能取到数字; 从每个格子能向下或向右走,于是向下面的点、右面的点连边; 将E-K算法中的bfs改成spfa求最
阅读全文
摘要:题目:http://poj.org/problem?id=1966 把一个点拆成入点和出点,之间连一条边权为1的边,跑最大流即最小割; 原始的边权赋成inf防割; 枚举源点和汇点,直接相邻的两个点不必枚举; 注意:1、源点为枚举点i的出点,汇点为枚举点j的入点; 2、读入方式,免空格; 3、在din
阅读全文
摘要:题目:http://poj.org/problem?id=1149 不把猪圈当做点,而把顾客当作点,把猪当作边权(流量); 因为猪圈中的猪可流动,所以共用一个猪圈的人互相连边; 注意应该连成链的形式,来保证先后顺序。 代码如下:
阅读全文
摘要:题目:http://poj.org/problem?id=3281 网络流做图中的匹配,注意为了限制每头牛只匹配一种食物和一种饮料,要把牛拆成两个点,之间连边权为1的边。 代码如下:
阅读全文
摘要:题目:http://poj.org/problem?id=1135 先在图中跑一遍最短路,最后倒的牌可能是dis值最大的点,也可能是在dis值最大的点所连的边上,尝试一下即可; 坑:n=1的时候输出点1。 代码如下:
阅读全文
摘要:题目:http://poj.org/problem?id=3013 看似生成树,实则最短路,可以将题意转化为点权*根到此点的边权和(最短路使其最小)。 代码如下:
阅读全文
摘要:题目:http://poj.org/problem?id=2584 以人和衣服作为点,建立超级源点和超级汇点,人连边权为1的边,衣服对源点连边权为件数的边(别弄乱顺序); 试图写构造函数,但CE了,最后只好用冗杂的写法。 代码如下:
阅读全文
摘要:#include #include #include #include using namespace std; queueq; int INF=1e9; int n,m,head[10005],cur[10005],ct=1,s,t,d[10005],ans; struct N{ int to,next,w; }edge[200005]; void add(int x,int y,in...
阅读全文
摘要:题目:http://poj.org/problem?id=2228 dp[i][j][0/1]表示前i小时中第j小时睡(1)或不睡(0)的最优值; 注意第一个小时,若睡则对最终取结果有要求,即第n个小时必须睡,所以据此DP两遍; 可以开滚动数组,否则容易MLE。 代码如下:
阅读全文
摘要:题目:http://poj.org/problem?id=3585 二次扫描与换根法,一次dfs求出以某个节点为根的相关值,再dfs遍历一遍树,根据之前的值换根取最大值为答案。 代码如下:
阅读全文
摘要:题目:http://poj.org/problem?id=1179 区间DP,值得注意的是有负值,而且有乘法,因此可能会影响最大值; 注意memset中写-1仅仅是-1,-2才是一个很小的负数; 最后找mxx时也要注意可能最大是负值,因此不能随便给mxx赋成0或-1之类。 代码如下:
阅读全文
摘要:题目:http://poj.org/problem?id=1742 贪心地想,1、如果一种面值已经可以被组成,则不再对它更新; 2、对于同一种面值的硬币,尽量用较少硬币(一个)更新,使后面可以用更多此面值硬币。 代码如下:
阅读全文
摘要:题目:http://www.joyoi.cn/problem/tyvj-1061 DP记录状态为当前任务时不在此任务位置上的两个人的位置(因为一定有一个人在此任务位置上); 不妨设初始位置p[0]=3,另外两个人在1,2位置上; 每次考虑上一任务的哪个人来到这一任务位置,更新; 开滚动数组以防止爆空
阅读全文
摘要:题目:http://poj.org/problem?id=1015 DP的第一维是选了几个人,第二维是当前D与P的差值,而值存的是当前D与P的和; 技巧1:通过平移避免负角标,即代码中的fix; 技巧2:做完DP后找出最小的差的绝对值时,如下的那一小段代码很有效率; 技巧3(*):记录路径——①更新
阅读全文
摘要:题目:http://poj.org/problem?id=3666 很普通的DP,离散化(sort)一下即可; mn的求法很不错(比我原来开了mn[]……简洁)。 代码如下:
阅读全文
摘要:题目:http://poj.org/problem?id=2279 书上的DP做法会爆内存,尝试写了一个,过了样例。 转载: 代码如下: #include<iostream> #include<cstdio> #include<cstring> #define ll unsigned long lo
阅读全文
摘要:题目:http://poj.org/problem?id=2127 LCIS,注意存储路径的方法。 代码如下: //void print(ll sx,ll sy)//{// if(f[sx][sy]==0)return;// ll xx=prex[sx][sy];// ll yy=prey[sx][
阅读全文
摘要:题目:http://codevs.cn/problem/2189/ 通过增加一维,将最优性转化为可行性。 代码如下:
阅读全文
摘要:题目:https://www.luogu.org/problemnew/show/P1018 区间DP+高精,注意初始化和转移的细节。 代码如下:
阅读全文
摘要:题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1042 递推,再用容斥原理减掉多余的,加上多减的……(dfs)即可。 代码如下:
阅读全文
摘要:题目:https://www.luogu.org/problemnew/show/P1080 排序方法的确定,只需任取两个人,通过比较与推导,可以得出ai*bi小的人排在前面; 高精度写的时候犯了些细节错误,详见注释。 代码如下: 这个运行起来有点慢,有些地方写得不够好,下面有一篇运行很快的代码,可
阅读全文
摘要:题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1853 dfs实现容斥原理即可。 注意:若在init中写“cnt++”,则出来后需要先cnt--再继续!! 代码如下:
阅读全文
摘要:今天尝试写了高精度除法(n进制),感觉不错,只有一处一开始没有注意到,后来才看书发现,见注释。 代码如下:
阅读全文
摘要:题目:https://www.luogu.org/problemnew/show/P1525 二分答案+二分图染色。
阅读全文
摘要:题目:https://www.luogu.org/problemnew/show/P1525 二分答案,二分图染色判断是否可行。 代码如下:
阅读全文
摘要:题目:http://poj.org/problem?id=2411 状态压缩,一行的状态记为一个二进制数,从上往下逐行DP,答案输出最后一行填0的方案数。 代码如下:
阅读全文
摘要:题目:http://www.joyoi.cn/problem/tyvj-1035 将点分为两类:x+y为偶数和x+y为奇数,这样则可以在两部分之间连边,作为一块骨牌; 然后二分图求最大匹配即可。 代码如下:
阅读全文
摘要:题目:https://www.luogu.org/problemnew/show/P3386 二分图匹配模板,注意左部点只dfs未匹配点。 代码如下:
阅读全文
摘要:题目:https://www.luogu.org/problemnew/show/P1020 主要是第二问,使用了dilworth定理:一个序列中最长不上升子序列的最大覆盖=最长上升子序列长度。 dilworth定理:http://www.cnblogs.com/nanke/archive/2011
阅读全文
摘要:题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2467 可以得出只需在每个五角形中去掉任意一条边,在某个五角形中去掉包括内边的两条边即可。 代码如下:
阅读全文

浙公网安备 33010602011771号