摘要:Happy Programming Contest ZOJ3703老实说:题目意思没看懂。。。(希望路过的大神指点)最后那个the total penalty time是什么意思啊!!!还是学到点东西的。。。解题的关键在于:要控制最后所用的时间最少,所以在程序的最开始应该先将输入的各种题目 以时间升序排列, 然后就可以保证每次都以时间小的优先选, 这样就可以保证最后相同的吸引值和解题数的情况下所花的时间最少。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 struct P...
阅读全文
摘要:I am Nexus Master! The 13th Zhejiang University Programming Contest参见:http://www.bnuoj.com/bnuoj/problem_show.php?pid=29137题意就理解错了!!!之后乱搞就也错了!!!Current Server Time:2013-08-30 23:29:55I am Nexus Master!Time Limit:2000msMemory Limit:65536KBThis problem will be judged on ZJU. Original ID:370464-bit int
阅读全文
摘要:Robberies HDU2955因为题目涉及求浮点数的计算:则不能从正面使用01背包求解。。。为了能够使用01背包!从唯一的整数(抢到的钱下手)。。。之后就是概率的问题:题目只是给出被抓的几率,如果同时抢两家银行的话,那么被抓的概率是:(1-一家不被抓的概率*另一家不被抓的概率)才是同时抢两家被抓的概率!最后和题目给出的概率比较取较大值。。。那么赋初值的时候dp[0]=1。注意:不要误以为精度只有两位。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 double n,b[105]; 7 double
阅读全文
摘要:Big Event in HDU HDU1171就是求一个简单的背包:题意:就是给出一系列数,求把他们尽可能分成均匀的两堆如:2 10 1 20 1 结果是:20 10。才最均匀!三种解法:多重背包的优化与否:(1031MS) 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 int dp[250005]; 7 int a[55],b[55]; 8 int main() 9 {10 int n,s,i,j,k;11 while(scanf("%d",&n)!=EOF)12 {13
阅读全文
摘要:Piggy-Bank HDU 1114初始化的细节问题:因为要求恰好装满!!所以初始化要注意:初始化时除了F[0]为0,其它F[1..V]均设为−∞。又这个题目是求最小价值:则就是初始化时除了F[0]为0,其它F[1..V]均设为∞。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 const int inf=1000005; 7 int a[505],b[505],dp[10005]; 8 int main() 9 {10 int t,n,n1,m,i,j;11 scanf("%d"
阅读全文
摘要:Coins HDU 2844不能用最基础的多重背包模板:会超时的!!!之后看了二进制优化了的多重背包。就是把多重转变成01背包:具体思路见:http://www.cnblogs.com/tt123/p/3280521.html 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 int dp[100005],a1[100005],a[105],b[105]; 7 int main() 8 { 9 int n,m,i,j,k,s,cout1;10 while(scanf("%d%d",&am
阅读全文
摘要:链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=25585Current Server Time:2013-08-27 20:42:26Robots on a gridTime Limit:3000msMemory Limit:65536KB64-bit integer IO format:%lld Java class name:MainPrevSubmitStatusStatisticsDiscussNextFont Size:+-Type:Tag it!You have recently made a grid traversing
阅读全文
摘要:Dividing a Chocolate zoj 2705递推,找规律的题目:具体思路见:http://blog.csdn.net/u010770930/article/details/9769333 1 #include 2 #include 3 using namespace std; 4 int a[50]; 5 int main() 6 { 7 int i,j,maxx; 8 long long m,n; 9 a[0]=1;10 a[1]=1;11 while(~scanf("%lld%lld",&m,&n))12 {13 maxx=max(m,..
阅读全文
摘要:Largest Rectangle in a Histogram HDU1506一道DP题:思路:http://blog.csdn.net/qiqijianglu/article/details/8556852 1 #include 2 #include 3 using namespace std; 4 int a[100005]; 5 int l[100005],r[100005]; 6 int main() 7 { 8 int n,i,j; 9 long long maxx,sum;10 while(~scanf("%d",&n)&&n)11 {
阅读全文
摘要:悼念512汶川大地震遇难同胞——珍惜现在,感恩生活HDU 2191一道裸的多重背包问题: 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 int dp[10005],a[10005],b[10005],c[10005]; 7 int main() 8 { 9 int t,n,m;10 scanf("%d",&t);11 while(t--)12 {13 scanf("%d%d",&m,&n);14 for(int i=0;i=a[i];k--
阅读全文
摘要:湫湫系列故事――减肥记I HDU 4508一道裸的完全背包 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 int c[100005],a[105],b[105]; 7 int main() 8 { 9 int n,i,j,m;10 while(scanf("%d",&n)!=EOF)11 {12 for(i=0;i 2 #include 3 #include 4 #include 5 using namespace std; 6 int c[100005],a[1...
阅读全文
摘要:Charm Bracelet POJ 3624就是一道典型的01背包问题: 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 int a[3405],b[3405]; 7 int c[12888]; 8 int main() 9 {10 int n,m,i,j;11 while(scanf("%d%d",&n,&m)!=EOF)12 {13 for(i=1;i=a[i];j--)18 if(c[j] 2 #include 3 #include ...
阅读全文
摘要:TelescopePOJ 3675一道模板题:这个模板太难打了,记住就行了吧。。。就是给你一个圆,求一个多边形在圆里的面积:分五种情况!!!因为任何多边形可以分成若干个三角形。。。那么就判断两点与圆心形成的三角形来求面积。。。参见:http://hi.baidu.com/billdu/item/703ad4e15d819db52f140b0b(五种情况,带图的哦!亲)接下来就是模板。。。转载于:http://gzhu-101majia.iteye.com/blog/1128345 1 //多边形与圆点相交面积 poj3675 2 #include 3 #include 4 #inc...
阅读全文
摘要:Lowest BitHDU 1196非常水的题目:(不解释) 1 #include 2 #include 3 #include 4 using namespace std; 5 int main() 6 { 7 int n,d; 8 while(scanf("%d",&n)!=EOF&&n) 9 {10 d=0;11 while(1)12 {13 if(n%2==0)14 {15 d++;16 n=n/2;17 ...
阅读全文
摘要:Invitation CardsPOJ 1511较水的题,可以说是一道模板题了。。。spfa+邻接表但是有几个注意的地方:1,题目给出的数据较大,只能用邻接表,并且要__int64的配合。2,题目要求来回的最短路,需要建立两个邻接表(反向可以了)。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 const __int64 max1=1000000005; 8 int vis[1000005],pre[1000005],pre1[1000005],t,d1; 9 _...
阅读全文
摘要:首先声明叉积在计算几何是基本用法!!他的奶名就叫做向量积!!(好熟悉的称呼)那么叉积主要注意方向问题:他是以前面的向量为起点转向另外那个向量的角度!!Wall HDU 1348一道模板题!!(凸包问题)三步骤:排序,再排序,再是重点进行判断!!!先进行排序,从小到大找出最左下角的一个坐标!之后以这个坐标找出每个点的极角(用个三角公式atan2(y,x))之后以三点为核心进行判断!!!如果第三点在前两点连线的左边可以,不然回溯再进行判断!!具体参见:http://hi.baidu.com/nicker2010/item/757c4350688a86a3adc857ed 1 #include 2
阅读全文
摘要:小Q系列故事――�丝的逆袭 HDU 4500水题: 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 int main() 7 { 8 int n,m,i,j,a[25][25],b[25][25],max1,left,right; 9 while(scanf("%d%d",&n,&m)!=EOF)10 {11 if(n==0&&m==0)12 break;13 for(i=1;i=1)24 {25 ...
阅读全文
摘要:猜数字HDU 1172一道模拟题:水爆了!!竞无从下手就是暴力枚举!! 1 #include 2 #include 3 #include 4 using namespace std; 5 struct line 6 { 7 int x; 8 int y; 9 int z;10 }a[105];11 int main()12 {13 int a1[5],b2[5];14 int n,i,j,k,k1,w,sum;15 while(scanf("%d",&n)!=EOF)16 {17 if(n==0)18 ...
阅读全文
摘要:SwapHDU 2819此题主要让我们发现匈牙利算法中记录匹配点编号数组的应用:此数组记录的是左边的第几个与右边的第几个匹配!因为要求对角线匹配,那么进行两两移位就行了。。。注意的是:你把横坐标的数放在左边,竖坐标的数放在右边的话,是移动C。反过来就是移动R。具体看代码:(注意红色字体部分) 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 int a[105][105],b[105],vis[105],a1[105],b1[105],n; 7 int dfs(int x) 8 { 9 for(in...
阅读全文
摘要:先把最基础的概念搞清楚:二分图:有两组顶点,一组顶点记为S1,另一组记为S2,S1和S2没有公共的元素,并且所有的边都是连接S1和S2中的点的,对于S1和S2本身,它们内部的任何两个点都没有边相连,这样的无向图就叫二分图。点覆盖集:即是一个点集,使得所有边至少有一个端点在集合里。边覆盖集:即是一个边集,使得所有点都与集合里的边邻接。(其实我觉得这句话很难理解)但是结合这句呢:在一个P*P的有向图中,最小路径覆盖=|P|-最大匹配数。(因为有匹配数的存在,本来要P个边的覆盖因此减小了)二分图的最小顶点覆盖数等于最大匹配数。匈牙利算法:主要二分图的最大匹配数。其实我觉得自学这东西不适合我,可能以前
阅读全文
摘要:N! HDU 1042一道大数阶乘题目:知道方法还是好实现的。。。对于求大整数的阶乘,可以采用分段相乘的方法,其理论基础是加法的分配律,乘法的分配律。例如 :123456789*123=123*(123*10^5+56789)=123*123*10^5+123*56789;(把他们分段来存储,就不会乘不了了)如果我们用一个数组result[0]=56789,result[1]=123,那么123456789*123就是123*result[0]%10^6和result[1]*123+result[0]/10^6构成的一个数,另result[0]=123*result[0]%10^6,resul
阅读全文
摘要:Doing Homework againHDU 1789可以用贪心做(网上搜了发现都是用贪心,DP就这么难???)思路:the reduced scores.从大到小排序,(相同就把the deadlines of the subjects从小到大排序)这里可保证耗分数最多的给完成,留下的分数最低。其实这贪心很容易想到。但最坑的是!只给出一个N,我还以为the deadlines of the subjects就在这里取呢!(1~N)之后才发现天数和所扣的分数未知!幸好这个天数就在1000左右,如果在大点肯定超时! 1 #include 2 #include 3 #include 4 #inc
阅读全文
摘要:CoinsPOJ 3210一道考逻辑的题:(感觉就是找规律)题目意思是:给出n个硬币,无论初始状态怎么样,总有存在一个最小且合适的数m。使其在任何的初始状态翻转m次达到全部向上或全部向下(一次只翻一个硬币)其实你画几个图会发现:奇数是不可能满足全部可能的!(因为偶数时都出来的步骤可以用一个循环(翻加不翻)状态不变)之后画几次发现n为偶数时,总有一个状态需要奇数的翻转才能达到全部向上或全部向下!而n为奇数时,需要最大的偶数次翻转就是(m=n-1)的时候。。。如果感觉只是猜测的话:请用数学归纳法来求证 1 #include 2 #include 3 #include 4 using namespa
阅读全文
摘要:下面是算是难的了吧。。。(不知道还搞得掉吗!)先上这个。。。 昂贵的聘礼 POJ 1062最近比较浮躁。看了好久才懂的。。。首先题已经知道起点!限制条件:因为有等级制度的限制。可用枚举(一个一个物品列出来)之后发现是单向图问题!先看代码吧。 1 #include 2 #include 3 #include 4 using namespace std; 5 int max1,a[105][105],level[105],d[105],m,vis[105]; 6 int distesila() 7 { 8 int i,...
阅读全文
摘要:最近感冒了,状态一直不好,但是发现感冒好了之后,就没有心思做题了,淡定!还有仅仅的十几天就Over了!!今天偷偷瞟了一眼大神们在做的多校联赛。唉~大神们都被虐啊!顿时更没心情了!!还是好好刷题吧。。。这次是最短路的专题:(听说有四种方法:本人只知道两种,还不太会)首先肯定做的是模板题!!!!!因为有两道是做过的,参见以前的代码:HDU 2544和HDU 1874(这里)最短路径问题HDU 3790还是很水的一道题:搞好距离和花费的关系就行了。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 int b[1
阅读全文
摘要:QuicksumPOJ 3094非常水: 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 int main() 8 { 9 char a[260];10 int n,sum,i;11 while(3)12 {13 gets(a+1);14 if(a[1]=='#')15 break;16 n=strlen(a+1);17 sum=0;...
阅读全文
摘要:Light BulbZOJ 3203又是一道数学题:(三分法) 1 #include 2 #include 3 #include 4 using namespace std; 5 int main() 6 { 7 double H,h,D,l,r,mid,mmid; 8 int n; 9 scanf("%d",&n);10 while(n--)11 {12 scanf("%lf%lf%lf",&H,&h,&D);13 l=(H-h)*D/H;14 r=D;mid=0;m...
阅读全文
摘要:摘自:http://www.cnblogs.com/911/archive/2008/05/20/1203477.html位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。C语言提供的位运算符列表:运算符含义描述&按位与如果两个相应的二进制位都为1,则该位的结果值为1,否则为0|按位或两个相应的二进制位中只要有一个为1,该位的结果值为1(如果两个相应的二进制都为0,则该位的结果值为0,否则为1)^按位异或若参加运算的两个二进制位值相同则
阅读全文
摘要:Monkey and Banana HDU 1069这个题目还是比较好理解的:题意:有n(n 2 #include 3 #include 4 using namespace std; 5 struct line 6 { 7 int x; 8 int y; 9 int z;10 }a[200];11 bool comp1(line i,line j)12 {13 if(i.x!=j.x)14 return i.xa[j].x&&a[i].y>a[j].y)41 temp=max(te...
阅读全文
摘要:很明显,没有A一道题,题目意思很容易懂,但是就是shit的超时!!之后就崩溃了。晚上好像弄懂了线段树,先上题目: I Hate ItHDU 1754要用线段树才不会超时:(计算机运行数目达到10^8就要1S了!!而一般题目就是那么2000MS~5000MS) 1 #include 2 #include 3 #include 4 using namespace std; 5 int a[200005]; 6 struct line 7 { 8 int left; 9 int right;10 int max1;11 }node[...
阅读全文
摘要:Max SumHDU 1003一个求最大连续子序列:(有模板吧) 1 #include 2 #include 3 #include 4 using namespace std; 5 int main() 6 { 7 int n,m,a[100005],i,j,k,l,r,s,MAX; 8 scanf("%d",&n); 9 for(i=1;iMAX)22 {23 l=j;24 r=k;25 MAX=s;26 ...
阅读全文
摘要:Tian Ji -- The Horse Racing HDU 1052顿时吓尿了:结题思路:1.若田忌最慢的马可以战胜齐王最慢的马,那么就让它战胜那匹慢马,胜利场次加1。(田忌最慢马 > 齐王最慢马)2.若田忌最慢的马不能战胜齐王最慢的马,那么它更加不能战胜其他的马,那就让它输,而且输给齐王最快马,失败场次加1。(田忌最慢马 2 #include 3 #include 4 #include 5 using namespace std; 6 int a[1005],b[1005]; 7 int main() 8 { 9 int i,n,...
阅读全文
摘要:一些基本的性质与公式:P01: 01背包问题题目有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}。这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生出来的。所以有必要将它详细解释一下:“将前i件物品放入容量为v的
阅读全文
摘要:一个人的旅行 HDU 2066迪杰斯特拉:Dijkstra: 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 int inf=1000000;//以后如果结果输出的是(负数或很大的整数),可能是(这个开大了或开小了) 7 int a[1005][1005],w[1005]; 8 int main() 9 {10 int t,s,d,n,i,j,p,min1,a1,a2,a3;11 while(scanf("%d%d%d",&t,&s,&d)!=EOF)12 {1
阅读全文
摘要:Longest Ordered Subsequence HDU2533求最长递增子序列的模板:Slyar:属于简单的经典的DP,求最长上升子序列(LIS)。先研究了O(n^2)的思路。令A[i]表示输入第i个元素,D[i]表示从A[1]到A[i]中以A[i]结尾的最长子序列长度。对于任意的0 = A[i] ,则D[i] = 1 1 #include 2 #include 3 #include 4 using namespace std; 5 int main() 6 { 7 int n,i,j,MAX,dp[2005],a[2005]; 8 while(scanf("%d"
阅读全文
摘要:哈密顿绕行世界问题HDU 2181坐标类型搜索 :这种类型的搜索题目通常来说简单的比较简单,复杂的通常在边界的处理和情况的讨论方面会比较复杂,分析这类问题,我们首先要抓住题目的意思,看具体是怎么建立坐标系(特别重要),然后仔细分析到搜索的每一个阶段是如何通过条件转移到下一个阶段的。确定每一次递归(对于DFS)的回溯和深入条件,对于BFS,要注意每一次入队的条件同时注意判重。要牢牢把握目标状态是一个什么状态,在什么时候结束搜索。还有,DFS过程的参数如何设定,是带参数还是不带参数,带的话各个参数一定要保证能完全的表示一个状态,不会出现一个状态对应多个参数,而这一点...
阅读全文
摘要:A Knight's JourneyPOJ 2488用DFS来做:发现最难的是找到用什么来表示回溯!(step的加与减,格子的变与不变。。。) 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 int c[30],d[35],n,m,flag,a[30][30]; 7 int b[8][2]={{-1,-2},{1,-2},{-2,-1},{2,-1},{-2,1},{2,1},{-1,2},{1,2}};//字典序(右边从小到大,左边再从小到大) 8 void dfs(int x,int y,in
阅读全文