摘要: 1 /* 2 题意:给你n个点,先选一条过至少一个点的垂线,然后在垂线上选一个点,过该点做水平线, 3 将图分成四部分,记为ul,ur,dl,dr,问选一条直线使得对于最坏情况选的水平线下,使得dl+ur最大的值; 4 同时输出在dl+ur最大的情况下ul+dr的可能值; 5 6 思路:先离散,因为题目没有说明数据范围, 7 然后依次枚举每一条垂直线,再从下到上枚举每一个点,利用树状数组记录; 8 最后输出解; 9 10 */ 11 12 #include<cstdio> 13 #include<cstring> 14 #include<cstdlib> 1 阅读全文
posted @ 2013-05-15 22:18 Rabbit_hair 阅读(393) 评论(0) 推荐(0) 编辑
摘要: 1 /* 2 题意:给你n条垂直线段,问有多少组三个线段,两两可见, 3 可见定义为对于两条线段有一条水平线段连接,不经过任意其他线段; 4 5 线段树建图,然后爆力判有几组(不知道效率如何); 6 从左到右扫描,先判断该区间内有可以连接哪几条线段,建图; 7 然后再插入; 8 9 问题:对于[1,4],[1,2],[3,4],[1,4] 10 如果直接1-2,3-4覆盖,当用1-4query的时候, 11 会发现不存在(2,3)区域的标记, 12 解决方法,每个点之间都插入一个点,用偶数表示原先的点, 13 用奇数表示点之间的区域,0,1,2,3,4 14 ... 阅读全文
posted @ 2013-05-15 20:21 Rabbit_hair 阅读(527) 评论(0) 推荐(0) 编辑
摘要: http://codeforces.com/contest/293/problem/C 1 /* 2 http://codeforces.com/contest/293/problem/C 3 题意:(a+b+c)^3=a^3+b^3+c^3+n,给你n的值,求多少组a,b,c是正整数的解; 4 化解3(a+b)(a+c)(b+c)=n,a,b,c等价 5 不妨设a<=b<=c,再设a+b=x,a+c=y,b+c=z ,则x<=y<=z; 6 则 7 x^3<=n/3, 8 x*y^2<=n/3, 9 x*y*z=n/3;10 */11 #include&l 阅读全文
posted @ 2013-05-15 20:01 Rabbit_hair 阅读(379) 评论(0) 推荐(0) 编辑
摘要: 题意:一个方程f(t)=a[n]*t^n+a[n-1]*t^(n-1)+...+a[1]*t;它有n-1个极值点,求每个系数ai小数点后第一个非零值,如果是整数则输出0;f(t)求导后,是n-1次的函数,f(t)==0最多有n-1的解,因为告诉你有n-1个极值点,所以f(t)=(x+t1)*(x+t2)*(x+t3)...(x+tn-1);系数可以直接搞用n^2的方法;dp[i][j]表示前i项(x+ti)相乘x^j的系数;这题感觉比较好的想法是,因为ti<10000,所以最终系数可能爆LL;但因为最后要求的系数都是一个整数除以i(i<=n),因为n<32,可以先求出1~n的 阅读全文
posted @ 2013-04-30 20:16 Rabbit_hair 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 1 //Guass_未测试版本 2 /* 3 如果可以肯定有唯一解,可以用化成上三角,时间有一点优势;但是如果存在自由变量 4 那么就不能这么写,而且化成上三角后,对应的行号和列号会发生错位; 5 6 */ 7 const double eps=1e-10; 8 typedef double Matrix[N][N]; 9 void gauss(Matrix A,int n){ //n个方程组,n个自由变量;A[i][n]放常量y[i]; 10 int i,j,r,c,id; 11 for (r=0;r<n;r++){ 12 id=r;... 阅读全文
posted @ 2013-04-28 00:37 Rabbit_hair 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 题号+推荐指数hdu4089 **View Code 1 /* 2 dp[i][j]表示队伍里有i个人,Tomato在j位置,到达目标状态的概率; 3 j==1 dp[i][j]=dp[i][j]*p1+dp[i][i]*p2+p4; 4 1<j<=k dp[i][j]=dp[i][j]*p1+dp[i][j-1]*p2+dp[i-1][j-1]*p3+p4; 5 j> k dp[i][j]=dp[i][j]*p1+dp[i][j-1]*p2+dp[i-1][j-1]*p3; 6 {i>=j} 7 化简: 8 j==1 dp[i][j]=dp[i][i]*p21+p41 阅读全文
posted @ 2013-04-15 20:57 Rabbit_hair 阅读(1032) 评论(0) 推荐(1) 编辑
摘要: 题意:N个子串,每个串价值为1,给你一个长串S,求重排后最大的价值(可重叠);明白题意后,很裸的自动机+DP,建完自动机状态表示成dp[2][500][20][20][20],把其中3个必然小于20的元素来DP,然后TLE,40*500*20*20*20,有30组case,必然TLE;View Code 1 /* 2 学习一:一种压缩方式,类似于进制表示,每个元素的个数确定后 3 num[],那么bas[0]=1,bas[1]=bas[i-1]*(num[i-1]+1); 4 例如num[]={2,1,3,2};bas[]={1,3,6,24}; 5 编码 incode() ret... 阅读全文
posted @ 2013-04-08 20:53 Rabbit_hair 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 题意:op:对平面上任意一个点操作+v;query:询问矩形[x1,y1,x2,y2]里面所有点v的总和;矩形大小为20000*20000,比赛的时候看到这道题目第一直觉就是二维树状数组,但范围太大会mle,二维线段树也会mle(之后树套树的二维线段树),比赛结束后各种询问;方法1:用map<int,int> mp[N];来减少内存的,只在用到的地方开,没有用到的地方就不开;View Code 1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<alg 阅读全文
posted @ 2013-04-07 22:45 Rabbit_hair 阅读(299) 评论(0) 推荐(0) 编辑
摘要: hdu 2280(DP)View Code 1 #include<cstdlib> 2 #include<cstdio> 3 #include<iostream> 4 #include<algorithm> 5 #include<cmath> 6 #include<cstring> 7 using namespace std; 8 const int m=5; 9 const int oo=5100;10 int dp[1010][40];11 int n,c;12 int mz[1010];13 void dfs(int 阅读全文
posted @ 2013-01-27 16:27 Rabbit_hair 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 想了好久才看懂大牛的结题报告,附上链接:http://blog.csdn.net/cyberzhg/article/details/7840922自己理解,整理下:刚开始的时候陷入了一个误区,枚举所有点把他们当树根,然后递推:dp[rt][0]+=min(dp[son][0]-ca,dp[son][1]);很明显这个递推是每次全部取固定为子树根了,情况不完全;也就是二维不能完全表示状态;dp[N][2][2]dp[rt][0][0]:表示以rt为树根的子树根节点选择了A,但是与根节点A联通的块内(即各个子树的根也选了A,由根节点也选A,连通起来的连通块)没有一个是完全花费的(没有确定起点);d 阅读全文
posted @ 2013-01-22 18:30 Rabbit_hair 阅读(273) 评论(0) 推荐(0) 编辑