摘要: http://codeforces.com/contest/294/problem/C先考虑连续子集内的情况,如果有两边的情况,ans *=1 ;不然,设子集大小为n,ans*=2^(n-1)。在自己间的组合问题,设每个子集大小为Ni(1<=i<=m),ans = ans * C(N1+...+Nm,N1) * C(N2+...+Nm,N2) * ... * C(N(m-1)+Nm,N(m-1)) * C(Nm,Nm)。注意n == m的时候ans=1,因为空集也是一种情况。#include <cstdio>#include <cstring>#includ 阅读全文
posted @ 2013-04-08 02:06 aiiYuu 阅读(318) 评论(0) 推荐(0) 编辑
摘要: http://codeforces.com/contest/294/problem/B0-1背包(数组开小贡献了4个wa)原理解释:这是一个0-1背包模型如果想对背包问题有更深入的理解可以看这里:http://cuitianyi.com/Pack/或上百度查“背包问题九讲”。现在按我的方法来解释一下(最基本的开二维数组的)0-1背包:0-1背包问题原型:现在我有一个容量为V的空背包,而现在我在某个地下城堡里发现了n颗珍贵的宝石,每颗宝石i都有他的体积cost[i]和价值value[i]。于是我要找到最好的一种方式在背包容量有限的情况下装进一些宝石使得他们的总价值最高。设数组dp[i][j]表示 阅读全文
posted @ 2013-04-08 01:50 aiiYuu 阅读(362) 评论(2) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2051题目大意:有若干任务,给出任务的id(各个任务唯一)和执行间隔(各个任务不唯一);要求按照执行的时间顺序来输出要求的前k个任务id号;当两个任务在同一时间执行时,先输出id小的。直接用priority_queue进行模拟操作,每次对最优元素出队列然后对该元素进行处理在把处理后的元素重新放入队列。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector># 阅读全文
posted @ 2013-04-07 23:13 aiiYuu 阅读(204) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1160经典邮局问题f[i][j]表示前i个邮局建在前j个村庄时的最小距离;dis[i][j],表示有1个邮局在村庄i与j之间时,村庄i至村庄j到邮局的最短距离总和 #include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>#include <set>#include <map>#include <cmath>#include 阅读全文
posted @ 2013-04-07 13:19 aiiYuu 阅读(620) 评论(0) 推荐(0) 编辑
摘要: http://acm.fzu.edu.cn/problem.php?pid=1004经典上山问题,这里用滚动数组小小优化了一下空间~\(≧▽≦)/~#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>#include <set>#include <map>#include <cmath>#include <queue>using namespace std;t 阅读全文
posted @ 2013-04-07 12:29 aiiYuu 阅读(189) 评论(0) 推荐(0) 编辑
摘要: http://acm.fzu.edu.cn/problem.php?pid=1003题目大意:一打(12个)硬币里有一个质量和其他11个不太一样,现在已知称量3次的情况,求质量有问题的硬币的编号和它是重了还是轻了。直接枚举24种情况(第i块硬币重了还是轻了)再判断。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>#include <set>#include <map>#inclu 阅读全文
posted @ 2013-04-07 12:21 aiiYuu 阅读(301) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2259队列是一种先进先出的数据结构。它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称作队尾,进行删除操作的前段称作队首。队列中没有元素时,称作空队列。题目大意:在组队队列中,每个元素(element)属于一支队伍。如果一个元素将要进入组队队列时,它会先从头到尾先检查他的队友(同属一支队伍)是否已经在队列中,如果找到了,他就会紧随其后进入队伍。如果没有找到,则他会从队列末尾入队,并成为自己队伍的第一个元素。出队操作则跟普通队列一样:元素在组队队列中按从头到尾的顺序出列。假设现在有n个队伍, 阅读全文
posted @ 2013-04-07 05:20 aiiYuu 阅读(398) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2082堆栈是一种先进后出的数据结构。他有一个栈顶指针,通过对堆栈的入站和出栈控制,可以改变一个序列的顺序。题目大意:紧贴x轴有一些互相挨着的矩形,给定每个矩形的长宽,问它们可以形成的最大矩形是多少。用堆栈来实现,将矩形入栈,保持栈中的元素高度递增,如果即将入栈的高度data.h比栈顶元素的高度lasth小,则退栈。一直退到可以保持栈顶元素高度递增的那个元素x,在退栈过程中统计由lasth至x之间可以形成的最大矩形面积S,记录由lasth至x之间矩形总宽度totalw,在弹出这些元素之后再向栈中压入一个高度为data.h,宽度为totalw+ 阅读全文
posted @ 2013-04-07 04:42 aiiYuu 阅读(332) 评论(0) 推荐(0) 编辑
摘要: http://acm.fzu.edu.cn/problem.php?pid=1001题目大意;找到1~n-1一共n个数中出现过两次的那个数。 先预处理,异或操作,假设所有的数都出现了一次;然后再依次异或这n个数,结果就是所有出现过奇数次的数的异或和,而只有答案要求的那个数(加上预处理)是出现奇数次的,所以结果就是所要的答案。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>#include <set 阅读全文
posted @ 2013-04-07 04:02 aiiYuu 阅读(585) 评论(0) 推荐(0) 编辑
摘要: http://programming2013.cstnet.cn/qualification/problem/1题目大意:Alice和Bob还有其他几位好朋友在一起玩传话游戏。这个游戏是这样进行的:首先,所有游戏者按顺序站成一排,Alice站第一位,Bob站最后一位。然后,Alice想一句话悄悄告诉第二位游戏者,第二位游戏者又悄悄地告诉第三位,第三位又告诉第四位……以此类推,直到倒数第二位告诉Bob。两位游戏者在传话中,不能让其他人听到,也不能使用肢体动作来解释。最后,Bob把他所听到的话告诉大家,Alice也把她原本所想的话告诉大家。由于传话过程中可能出现一些偏差,游戏者越多,Bob最后听到 阅读全文
posted @ 2013-04-06 17:10 aiiYuu 阅读(299) 评论(0) 推荐(0) 编辑