摘要: 虽然这题可以用暴力n^3过,但是还有有种n^2的方法的,枚举b,对于b,分别枚举a和c,得到对于这个b的最优解,然后从所以b中选一个最优的。要保证字典序最小,只要从小往大枚举就好了感谢moonflyer#include#include#include#includeusing namespace s... 阅读全文
posted @ 2015-07-17 23:37 陈瑞宇 阅读(213) 评论(2) 推荐(0) 编辑
摘要: 对于每个元素,最理想的情况就是都在它的左边或者右边,那么sort一下就可以得到一个特解了,然后大的中间不能有小的元素,因为如果有的话,那么无论选小的还是选大的都不是最优。对小的元素来说,比它大的元素在哪里是没有关系的。所以把大的看作一个整体,然后插空法算出总方案数。答案用llu存#include#i... 阅读全文
posted @ 2015-07-17 22:17 陈瑞宇 阅读(278) 评论(0) 推荐(0) 编辑
摘要: 题意:分段用椎台面积近似计算体积,然后计算出近似值和真实值的相对误差微积分加数学。平头椎台的体积计算公式:V = 1/3*h*(S1+S2*sqrt(S1*S2)一个更快的计算多项式值的方法: for(int i = 15; i >= 0; i--) ans = ans*x+p[i],比直接pow快... 阅读全文
posted @ 2015-07-17 20:42 陈瑞宇 阅读(492) 评论(0) 推荐(0) 编辑
摘要: 二分图最大匹配问题遇到冰山就把行列拆成两个部分。每个部分x也好,y也好只能匹配一次图画得比较草,将就着看横着扫一遍,竖着扫一遍,得到编号一个位置就对应一个(xi,yi)就是X集到Y集的一条边,由题意,每个点只能被选择一次。所以最大匹配的边数就是答案了。算法过程当增广路不存在的时候,就是二分图最大匹配... 阅读全文
posted @ 2015-07-17 19:22 陈瑞宇 阅读(534) 评论(0) 推荐(0) 编辑
摘要: 比较坑的水题,首项前面的符号,-1,+1,只有数字项的时候要输出0。感受一下这些数据160 0 0 0 0 0 0 0 0 -10 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 0-1 0 0 0 0 0 0 0 0 0-1 -1 -1 ... 阅读全文
posted @ 2015-07-17 14:14 陈瑞宇 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 加一个维度,钥匙的状态,状压一下。n很小,钥匙也只有10个,bfs就好了。忘了数组初始化。以后坚决不犯这种低级错误。#include#include#includeusing namespace std;const int maxn = 50+1;int g[maxn][maxn][4];int k... 阅读全文
posted @ 2015-07-17 14:10 陈瑞宇 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 一道贪心的题,因为最小的不能由别的转化,所以每次贪心找最小的,其余的转化成大的。从小到大,最小的如果不存在那么就break,否则减去一个,剩下的加k继续判断。#include#includeconst int maxn = 300;int cnt[maxn];int main(){ int T... 阅读全文
posted @ 2015-07-17 14:05 陈瑞宇 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 题意,给一个数字矩阵,要求从上往下的一条路径,使这条路径上数字之和最小,如有多条输出最靠右的一条。数字三角形打印路径。。。一般打印路径有两种选择,一是转移的时候加以记录,二是通过检查dp值回溯。#include#include#includeusing namespace std;const int... 阅读全文
posted @ 2015-07-17 14:01 陈瑞宇 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 没必要每次都真的修改一遍字母值,用一个标记表示字母最后的值,最后一遍的时候再进行修改#include#includeconst int maxlen = 1000000+10;char str[maxlen];char to[256];int main(){ //freopen("in.txt... 阅读全文
posted @ 2015-07-16 20:55 陈瑞宇 阅读(336) 评论(0) 推荐(0) 编辑
摘要: 一道物理题,解个2次方程就行了。。。求h最小的情况对应如下图所示做法不唯一,我想避免精度损失所以在化简的时候尽可能地去避免sqrt和浮点数乘除。似乎精度要求很低,直接用角度算也可以#include#includeint main(){ int T; scanf("%d",&T); ... 阅读全文
posted @ 2015-07-16 20:26 陈瑞宇 阅读(356) 评论(1) 推荐(0) 编辑
摘要: 思路就是有零一变化的位Or以后一定是1,And以后一定是0;那么如果b的二进制更长那么就把包含a的部分全部置为1或0,如果一样长那么就把不同的部分置为1或0。今天被这题坑的地方:1默认是int,如果要移到32bits以上要转成long long用1LL,血的教训。以及,数组开得太极限,很容易出错。#... 阅读全文
posted @ 2015-07-16 19:28 陈瑞宇 阅读(287) 评论(0) 推荐(0) 编辑
摘要: 一开始最容易想到间隔最多为n,但是结点还是太多了,需要优化。预处理:预判一下并保存下一个可以放的位置距离之前的距离。这样可以减少很多判断。最优化剪枝:如果当前长度+剩下没放的程序*最短间隔如果大于等于ans,那么对答案没有贡献,可以剪去。优化:占用和不占用两种状态,如果横向来看可以压缩为int,判断... 阅读全文
posted @ 2015-07-14 15:48 陈瑞宇 阅读(548) 评论(0) 推荐(0) 编辑
摘要: 多联骨牌的生成办法,维基上只找到固定的骨牌fix,而free的没有找到。于是只好写个set判重的简单枚举了。旋转的操作,可以在坐标轴上画个点,以原点为轴心,逆时针旋转90度,新的点的坐标为(-y,x)。顺时针也差不多。反转类似。对于操作完的骨牌,还要进行标准化,取最小的横纵坐标为参考,求出新的坐标,... 阅读全文
posted @ 2015-07-13 23:53 陈瑞宇 阅读(529) 评论(0) 推荐(0) 编辑
摘要: 读懂题意以后还很容易做的,和AbbottsRevenge类似加一个维度,筛子的形态,可以用上方的点数u和前面的点数f来表示,相对的面点数之和为7,可以预先存储u和f的对应右边的点数,点数转化就很容易了。具体做法看代码#includeusing namespace std;const int maxn... 阅读全文
posted @ 2015-07-13 23:47 陈瑞宇 阅读(433) 评论(0) 推荐(0) 编辑
摘要: 非常适合A*的一道题。比普通的迷宫问题加一个信息k表示当前穿过的障碍物的数量。#include#include#includeusing namespace std;const int MAX = 21;int m,n,k;int C[MAX][MAX][MAX];int G[MAX][MAX];i... 阅读全文
posted @ 2015-07-10 21:53 陈瑞宇 阅读(722) 评论(0) 推荐(0) 编辑