ACM
QAQ_
迷茫是因为能力还配不上梦想
展开
-
DFS求解素数环问题
素数环 每相邻的两个数之和为素数,DFS搜索+素数判断题目链接#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 50int a[50];bool vis[N];int n;bool judge(int x,int y){ int m=x+y; for(i原创 2015-11-22 16:13:01 · 350 阅读 · 0 评论 -
HDU 1579 记忆化搜索(递归+动态规划)
if a <= 0 or b <= 0 or c <= 0, then w(a, b, c) returns: 1if a > 20 or b > 20 or c > 20, then w(a, b, c) returns: w(20, 20, 20)if a < b and b < c, then w(a, b, c) returns: w(a, b, c-1) + w(a, b原创 2016-01-21 21:21:26 · 721 阅读 · 0 评论 -
HDU 5606_基础并查集
题意:n个点,n-1条边及其边的权值(0、1);求每个顶点与它距离最近的点的个数,最后对所有的值进行异或运算。分析:由题意可知, 求最短距离即求边权为0,。 考虑用并并查集将边权为0 的顶点合并,同时记录每个集合元素的个数。http://acm.hdu.edu.cn/showproblem.php?pid=5606#include<cstdio>#include<iostream>usin原创 2016-01-24 14:51:41 · 347 阅读 · 0 评论 -
HDU 5610 暴力枚举
题意:重量分别为a和 b 的杠铃片,分别有无限多个,现在要用a b两种杠铃片组合,使之达到重量c;求满足条件的a 和b 分别需要多少个.输出a+b最小的那个组合。分析: 1.因为杠铃是对称的,所以当c为奇数时,无解; 2.需要a的最大个数为c/a,,同理需要b的个数为c/b; 3.暴力枚举;=_=#include<cstdio>#include<iostre原创 2016-01-24 15:03:01 · 552 阅读 · 0 评论 -
CF Round#617(A B 。。。=_=)
A:简单的写数学题:=_= 从原点到N点(同一水平线)需要走的最少步数,每次只能走1.2.3.4.5步题目链接:http://codeforces.com/problemset/problem/617/B#include<bits/stdc++.h>using namespace std;int main(){ int n; while(~scanf("%d",&n))原创 2016-01-24 17:56:07 · 345 阅读 · 0 评论 -
HDU 5615
题意:判断给定的一元二次方程是否可以(十字相乘)分解。 ax2+bx+c –> pqx2+(qk+mp)x+km=(px+k)(qx+m). 分析:首先方程一定有解,即t=b^2-4ac >=0 ;因此,一般情况下方程可分解为 (2ax+b+sqrt(t))*(2ax+b-sqrt(t))=0 ; 又p,q,m,k,均为正整数,显然 2a, b均为正整数,而b-sqrt(t)>0, 所以关键条件原创 2016-02-02 03:46:47 · 213 阅读 · 0 评论 -
HDU 2602(01背包)
先来简单介绍一下01背包: 在M件物品取出若干件放在空间为W的背包里,每件物品的体积为W1,W2……Wn,与之相对应的价值为P1,P2……Pn。求出获得最大价值的方案。 分析:对每一个物品,都有两种状态,取与不取,从底向上来分析, dp[i][j] 表示前取前i个物品,占用体积j 的最大价值,那对物品i来说,有取与不取两种状态,若取,即为dp[i-1][j-w[i]]+p[i], 若不取,则原创 2016-02-02 04:03:32 · 256 阅读 · 0 评论 -
HDU 2546
Problem Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。 某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。Input 多组数据。原创 2016-02-02 04:12:03 · 237 阅读 · 0 评论 -
HDU 3466 (01背包)
题目大意:A merchant有n =个商品,每个都有其价格与价值,xiao想用手里的金钱来收获最大的商品价值,但是只有当小明身上的余额大于每件商品,商人规定的数目时,商人才会卖给他。求解获取最大价值的方案;分析:一开始按照一般的01背包来做,Wa ,之后看了结题报告才懂。需要先对q-p进行排序,以免受后效性的影响。 看个例子m=10,1(5 6 3) 2(2 8 5)当按12顺序选择时,或得的最原创 2016-02-02 04:30:12 · 215 阅读 · 0 评论 -
HDU 2199(多重背包转化为01背包)
现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并且只能整袋购买。 请问:你用有限的资金最多能采购多少公斤粮食呢?输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(1<=n<=100, 1<=m<=100),分别表示经费的金额和大米的种类,然后是m行数据,每行包含3个数p,h和c(1<=p<=20,1<=h<=200,1<=c<=原创 2016-02-04 12:29:12 · 527 阅读 · 0 评论 -
HDU 1114(完全背包)
题意:给出储蓄罐空时质量 和装满钱币时 的质量,然后给出若干组钱币的面值和其重量,用储蓄罐有限的空间装价值总和最少的钱币。解析: 完全背包:用容量有限的背包装一组物品。每种物品数量无限,求最优解。(与01背包不同的即为每种物品数量为1) 状态转移方程:dp[i][j]=max(dp[i-1][j],K*dp[i-1][j-w[i]+k*p[i]) 0=#include<cstdio原创 2016-02-04 12:59:44 · 231 阅读 · 0 评论 -
HDU 1597 find the nth digit
假设: S1 = 1 S2 = 12 S3 = 123 S4 = 1234 ……… S9 = 123456789 S10 = 1234567891 S11 = 12345678912 ………… S18 = 123456789123456789 ……………… 现在我们把所有的串连接起来 S=1121231234…….123456789123456789112345678912原创 2016-01-21 21:12:46 · 266 阅读 · 0 评论 -
HDU 2141 二分查找
题意: 给定三个集合A[ l ] , B [ m ] ,C [ n ],a , b , c 分属于ABC三个集合,给出一个数 x, 问是否在这三个集合中找到满足a+b+c=x;如能找到,输出YES,否则 NO;分析: 很显然用暴力查找的话,会超时,考虑用二分查找,来降低时间复杂度 注意点:由于给定的数据范围int32,但是在程序处理过程中,可能会有超出Int32位,所以用__int64,还需要原创 2016-01-21 21:02:01 · 295 阅读 · 0 评论 -
二叉搜索树 HDU 3791
Problem Description判断两序列是否为同一二叉搜索树序列 Input开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜原创 2015-12-03 23:52:26 · 276 阅读 · 0 评论 -
HDU 1528 二分图最大匹配
点击打开题目链接题目与之前做过的一道题目(田忌赛马hdu 1052)类似,变化不大;大意是:52张牌随机分成数量相等的两部分,已知玩家1的牌的排列顺序 ,现在玩家2需要对自己的牌排序,使同一顺序下对应的牌,自己的大,这样就可以得一分,问玩家2在最优的情况下所得的分数。牌的面值为2-9,T,J,Q,K,A,当面值相同时,比较花色,红桃>黑桃>方片>梅花,即H>S>D>C;需要注意的是A 为最原创 2016-01-17 19:41:41 · 437 阅读 · 0 评论 -
学霸,学渣,还是血神???微笑
神与学霸的共同点是积点都令人发指得高,这也是他们的主要特征,或者说是基本特征。但是他们的区别也是很大的。平时打电话给普通人:喂在干嘛? 玩 玩什么? 逛街/唱k/打游戏/看电影/睡觉/。。。打电话给学霸: 喂在干嘛?转载 2016-01-17 20:03:50 · 755 阅读 · 0 评论 -
HDU 2063 过山车
点击题目打开链接Problem DescriptionRPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了。可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做partner和她同坐。但是,每个女孩都有各自的想法,举个例子把,Rabbit只愿意和XHD或PQK做partner,Grass只愿意和linle或LL做partn原创 2016-01-17 20:10:54 · 298 阅读 · 0 评论 -
POJ 1325 最大匹配
题目大意:两台机器A和B,机器A有0~n-1中模式,B有0~m-1种模式,开始时A和B都工作在0模式; 给定K 个作业,对于作业j ,给定的约束条件是(i,x,y);表示作业i既可以工作在A的x模式下,也可以工作在B的y模式下; 我们要做的就是改变机器的顺序,给每个机器分配合适的作业,是机器重启次数最少.构造二分图:把A的n个模式和B的m 个模式看做两个集合,作为图的顶点,如果某个作业再两个模式原创 2016-01-17 20:34:09 · 692 阅读 · 0 评论 -
POJ 1469 最大匹配
题目大意:N个学生,p们课,,每一门课程可以有多个学生选修,给出每门课程学生的选修情况,问:对于每门课程可不可以找到一个课代表( 前提是该学生要选修该门课程)原题链接二分图匹配: 只用在输入处理(即构造二分图时注意下就可以的)#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define M原创 2016-01-17 20:48:31 · 978 阅读 · 0 评论 -
HDU 1048 字符串处理
题目大意: 告诉你明文转换成密文的加密方法是,将该字符在26个大写字母中的位置右移5个位置,所对应的字符。 题目问:给你一段密文,求它的明文;简单的字符串处理问题 1048题目链接#include<cstdio>#include<string>#include<iostream>#include<algorithm>using namespace std;string str,sta原创 2016-01-17 20:57:06 · 523 阅读 · 0 评论 -
HDU 2149 巴什博奕
简单介绍一下:巴什博奕 题目模板: 一堆棋子(n个),两个玩家A和B, 玩家每次轮流从该堆棋子中取若干个,至少1个,之多m个;经过若干轮之后,谁先取完谁就获胜。分析: 如果n=m+1;则无论A 从中取出多少,B 总能取完。 所以设n=(m+1)*k+r ; A从中取 r 个,B从中取 x 个,A 再从中取m+1-x个,则剩余(m+1)(k-1)个。。。。。。按照这样的取法(即每次留给B的个数要原创 2016-01-18 18:38:09 · 367 阅读 · 0 评论 -
HDU 1527 2177(威佐夫博奕)
有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。分析:假设两堆石子的数量分别用m,n来表示,(m,n);m#include<cstdio>#includ原创 2016-01-20 10:21:16 · 305 阅读 · 0 评论 -
CF Round #616 (A,B,C 字符串,贪心,DFS)
http://codeforces.com/problemset/problem/616/AA题:比较两个长整数的大小(可能含有前导0), 数据位数高达10^6位;考虑用字符串 一开始想的是把前导0,去掉,然后从高位到低位逐位比较;TLE了 下面是TLE代码:#include<cstdio>#include<cstring>using namespace std;#define N 100原创 2016-01-20 23:58:16 · 318 阅读 · 0 评论 -
且行且珍惜吧!!!
转自:ACM入门其实有两种方法:1 自己看竞赛书,看别人的程序等等。2上题库(如:pku和zju)做题。第一种可以较为系统的学到东西,但是时间久了就会无聊,而且长久实践不足,编程能力永远得不到真正的提高。第二种虽然看着自己AC很兴奋,看着自己的帐号排名提高很开心,但是学习不系统,对较深的知识学习不足,总停留在做简单题的份上。 最好的方法就是两种方法相结合。作为入门者还是要以多看简单竞赛书多转载 2016-02-05 16:06:53 · 536 阅读 · 0 评论 -
POJ 1276(多重背包)
题意: 给出现金cash 和钱币的种类n,之后对应n组钱币的数量和面值,求用这些钱币组合出的不超过cash 的最大金额。分析:多重背包:有n种物品和容量为v的背包,每种物品有num[i]个,每个物品价值value,费用expense。求在费用不超过容量v 的前提下,背包能够装在物品的最大价值。 如果把每个物品看作独立 的个体,就可直接按照01背包来处理,但是这样每个状态时间复杂度相对很高(nv*n原创 2016-02-06 10:31:32 · 479 阅读 · 0 评论 -
poj 1014 ,hdu 2844 (多重背包)
poj 1014 题意:给出6个数,分别表示面值为1-6对应钱币的数量。判断是否可以等值分割总金额。分析:多重背包应用。计算出总金额sum,若为奇数,则false,否则sum/=2;背包容量即为此时的sum,费用和价值相同,求出dp[sum].判断dp[sum]==sum?true:false. 注意点:因为物品要装满背包,所以初始化dp数组,dp[1……n]=负无穷,dp【0】=0;#inc原创 2016-02-06 11:21:40 · 259 阅读 · 0 评论 -
CF Round 8VC (A. Orchestra暴力)
题意:r行c列的图,n个 violas在图中的坐标。求至少包含k个 violas的矩形个数。分析:暴力枚举,O(n^6)#include<bits/stdc++.h>using namespace std;int a[102][102];int main(){ int r,c,n,k,x,y,s=0; scanf("%d%d%d%d",&r,&c,&n,&k); fo原创 2016-03-02 19:07:14 · 270 阅读 · 0 评论 -
CF Round 8VC (B. Island Puzzle)判断两个环相等
题意:给出长度位n 的两个数串,每个串都是一个环即首尾看作是相连的。 问:第一个串是否可以可以通过移动一定的步数,变成第二个数串。 Examples input 3 1 0 2 2 0 1 output YES input 2 1 0 0 1 output YES input 4 1 2 3 0 0 3 2 1 output NO分析:题中的0是关键点,由于是原创 2016-03-02 19:19:52 · 462 阅读 · 0 评论 -
POJ 1308(Is it a tree并查集)
题意: 给出若干条边,判断是否为一棵树分析:树的特点,只有一个根节点,对每对点,我们判断他们是否为同一集合,若是,则说明存在环;还有一个注意点就是,森林的存在。#include<cstdio>using namespace std;const int N=10002;int father[N],flag[N];//标记已存在的节点int find(int x){ if(x!=fat原创 2016-03-02 20:06:01 · 237 阅读 · 0 评论 -
CF #633A(暴力枚举)
题意:a ,b ,c三个数,求是否存在两个数i,j ,使a*i+b*j=c;暴力查找。Code one://最裸的暴力 =++=#include<bits/stdc++.h>using namespace std;int main(){ int a,b,c; scanf("%d%d%d",&a,&b,&c); for(int i=0;i<=10000;i++)原创 2016-03-02 21:27:30 · 880 阅读 · 0 评论 -
CF #615A(标记)
题意:n个开关,m个灯泡。给出每个开关可以控制的灯泡序号,问:是否可以通过按下某些开关使所有灯泡都亮。分析: 分析一下,即判断对1-m的灯泡是否都出现了。对于每个开关可以控制的灯泡标记为true;#include<bits/stdc++.h>using namespace std;int flag[105];int main(){ int n,m,a,x; cin>>n>>m原创 2016-03-02 21:32:50 · 384 阅读 · 0 评论 -
CF #632A(A. Grandma Laura and Apples,)数学题
题意:有n个顾客买老太太的苹果,单价p,每个顾客买老太太所拥有苹果的一半,老太太会对某些顾客优惠即送半个苹果,最后苹果都卖光了,求总共卖了多少钱。 Examples input 2 10 half halfplus output 15 input 3 10 halfplus halfplus halfplus output 55 half表示不送苹果,halfplus即原创 2016-03-03 23:14:03 · 384 阅读 · 0 评论 -
CF #614A(查找指定范围内的幂乘数)
A. Link/Cut Tree time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard output Programmer Rostislav got seriously interested in the Link/Cut Tree data s原创 2016-03-03 23:59:22 · 293 阅读 · 0 评论 -
CF #614B
题意:给出n个数,每个数的长度在(1-100000),n个数中至多有一个数不是由01组成,或1的个数大于1.求所有数相乘的结果。分析:由于题目给出的数据超大,考虑用字符串。大致思路是找到不符合条件的那个数,即为最大数输出之,由于其他数都为01组成,且仅有1个1 ,所以统计后缀0的个数,最后输出即可。即为相乘的结果#include<bits/stdc++.h>using namespace std;原创 2016-03-04 00:12:34 · 377 阅读 · 0 评论 -
CF #651C. Watchmen(map容器)
题目: 给出序列对x , y 判断右边两个式子是否相等 |xi - xj| + |yi - yj|. 分析:对两边式子进行平方运算得 |xi - xj| * |yi - yj|=0.,所以得到xi==xj或yi==yj. 只要枚举这两者出现的情况即可,注意要去重。 数据结构:map,pair#include<bits/stdc++.h>using namespace std原创 2016-03-10 17:39:11 · 427 阅读 · 0 评论 -
CF #651B. Beautiful Paintings
题意:n个数,现在以任意的顺序排列,使a[i]+1>a[i],这样的对数最多。分析: 方法一:先排序。对每一个数,向后扫描比它大的那个数, 方法二 :如果n个数都不相同,则必有n-1对符合要求,一旦有最大重复数字个数为m,则有n-1-m对。符合要求。/*method ——1*//*#include<bits/stdc++.h>using namespace std;int a[1005]原创 2016-03-10 18:20:36 · 497 阅读 · 0 评论 -
HDU 1203(01背包)
题意:n万美元,m个学校,然后是m个学校的学费 及其成功拿到offer的概率。求至少拿到一个学校offer 的概率。分析:要求至少拿到一个offer的概率,即等于1-(一个offer也拿不到的概率)。1-(1-dp[k])*(1-p[k]) 状态转移方程:dp[j]=max(dp[j],1-(1-dp[j-a[i]])*(1-p[i])); dp[j]为花费为j万元时,至少拿到一个offer的概原创 2016-02-29 11:20:16 · 250 阅读 · 0 评论 -
HDU 1176(二维动态规划)
分析: 和2084的数塔非常相似,不同的只是此题只用求三个数的最值。其实本质一样的,即自顶向底找一条权值最大的路径。理解数塔,这题也就更好理解了。对于每一个位置,它下方的三个数是它下一秒可以到达的位置。 因此要求0秒5位置可以或得的最大值,只需自底向上更新数据。 dp[i][j]=max(dp[i+1][j-1],dp[i+1][j],dp[i+1][j+1]); dp[i][j] 表示,第原创 2016-02-24 00:10:33 · 347 阅读 · 0 评论 -
HDU 3591 (多重背包)
题意大概:小钱要买价值为t 的物品 ,他有n种不同数量的硬币,求在此次交易所需花费数量最少的硬币数(付款+售货员找回的);分析:对顾客用多重背包,对售货员用完全背包。 此时背包中的容量为N,价值为1,花费为硬币的价值。 因为输出-1时,也要输出Case ,哇了好多=_=!!!#include<cstdio>#include<cstring>#include<algorithm>using原创 2016-02-10 00:32:43 · 552 阅读 · 0 评论 -
HDU 1712(分组背包)
题意大概: n门课程,m天。对于每门课程,花费1…..m天的效益情况,求m天内最大效益。分组背包:所有的情况被分成n组,每组不选或只选一个,即同组内有冲突。设f[k][v]为前k组物品花费费用v的最大价值, 状态转移方程为:f[k][v]=max( f[k-1][v-c]+w,f[k-1][v])#include<cstdio>#include<cstring>#include<algorit原创 2016-02-11 22:42:39 · 245 阅读 · 0 评论