
算法
PMYCQACF
coding是为了更好的未来
展开
-
[HDU]1520 Anniversary party
这道题目其实就是一个裸的树形DP,和洛谷P1352 没有上司的舞会一模一样,只是要加一个读入判断罢了[英文不好导致错了3回,每次都是Wrong Answer,就是没有加这个判断!!!]#include<bits/stdc++.h>using namespace std;int dp[6010][2],fa[6010],v[6010],n;void tree_dp(int i){ in原创 2017-09-01 23:12:33 · 353 阅读 · 0 评论 -
USACO Healthy Holsteins 健康的好斯坦奶牛
农民JOHN以拥有世界上最健康的奶牛为骄傲。他知道每种饲料中所包含的的牛所需的最低的维他命量是多少。请你帮助农夫喂养他的牛,以保持他们的健康,使喂给牛的饲料的种数最少。给出牛所需的最低的维他命,输出喂给牛需要哪些种类的饲料? 给出牛所需的最低的维他命量,输出喂给牛需要哪些种类的饲料,且所需的饲料剂量最少。维他命量以整数表示,每种饲料最多只能对牛使用一次,数据保证存在解。INPUT FORMAT原创 2017-06-11 22:25:14 · 657 阅读 · 0 评论 -
USACO Score Inflation 总分
学生在竞赛中的得分越多我们越高兴。我们试着设计我们的竞赛以便人们能尽可能的多得分,这需要你的帮助。我们可以从几个种类中选取竞赛的题目,这里的一个"种类"是指一个竞赛题目的集合,解决集合中的题目需要相同多的时间并且能得到相同的分数。你的任务是写一个程序来告诉职员,应该从每一个种类中选取多少题目,使得解决题目的总耗时在竞赛规定的时间里并且总分最大。输入包括竞赛的时间M(1 <= M <= 10,00原创 2017-06-11 22:22:06 · 659 阅读 · 0 评论 -
USACO checker Challenge 跳棋的挑战
检查一个如下的6 x 6 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行,每列,每条对角线(包括两条主对角线的所有对角线)上都至多有一个棋子。 1 2 3 4 5 61 | | O | | | | |2 | | | | O | | |3 | | | | | | O |4 | O | | | | | |5 | | | O | | | |6 | | | | | O | |上面的布局可以原创 2017-06-11 22:14:08 · 852 阅读 · 0 评论 -
KMP算法
KMP算法#include<stdio.h>#include<stdlib.h>#include<string.h>int n,m;int next[1010];char s[10100],t[101];void ne(char s[]){ for(int i=1;i<=m;i++){ int j=next[i-1]; while(j>0 && s原创 2016-07-30 10:50:06 · 476 阅读 · 1 评论 -
期末1.0比赛
信息编程原创 2016-07-30 15:41:39 · 398 阅读 · 1 评论 -
7.31_day2
7.31_day2原创 2016-07-31 08:25:33 · 412 阅读 · 0 评论 -
算24点 C++
其实这道题木有什么困难,先放题目吧! 【 问题描述】 几十年前全世界就流行一种数字游戏, 至今仍有人乐此不疲. 在中国我们把 这种游戏称为“ 算 24 点”。 您作为游戏者将得到 4 个 1~9 之间的自然数作为 操作数, 而您的任务是对这 4 个操作数进行适当的算术运算, 要求运算结果等 于 24 。 你可以使用的运算只有: + , - , * , / , 您还可以使用() 来改变运原创 2016-10-04 14:32:21 · 4592 阅读 · 1 评论 -
高精度
今天我AC了高精度加法和乘法,两道题目的思路差不多,用数组实现,就是这样,额,先用string读入再转数组,然后再算进位什么的………………然后,就没了吧!嗯没了,呵呵原创 2016-10-09 21:11:57 · 332 阅读 · 0 评论 -
stick
听说我上一次的代码发错了???好吧,那我再发一次,注释同上::#include<cstdio>#include<cstdlib>#include<algorithm>int n,cnt,sum,maxx,flag,t,m;int a[100];bool b[100];using namespace std;int cmp(const int&a,const int&b){ r原创 2016-10-15 10:20:54 · 889 阅读 · 0 评论 -
oil 分油
其实很简单,一个BFS就过 先放题目:【 问题描述】设有大小不等的3 个无刻度的油桶, 分别能盛满 X、 Y、 Z(都小于等于 100)升油, 初始时第一个油桶盛满, 另外两个为空。 现在, 要想在某一瓶中分出 T升油。 分油时可把一个桶里的油倒入另外的桶中, 或者将桶中的油倒空。 设计一种以最少步骤的分油方案。【 输入】以文件方式输入数据, 格式为:第一行: X Y Z {设第一个原创 2016-10-15 11:51:36 · 969 阅读 · 0 评论 -
诸侯安置 搜索02 empire
这道题目的第一感觉肯定是很像八皇后!!!可是它并不是八后所以我们需要使用一种逆向思维去思考! 题目大家应该都知道了,我就不讲了,这里主要讲思路: 重新描述一下问题,其实就是在一个边长为 2n-1 的正菱形(如上左图为 n=3的情形)上摆放 k 个棋子,使得任意两个棋子都不在同一行、同一列。试问:这样的摆法共有多少种?看到这道题目,我们就会立即想起一道经典的老题目:n 皇后问题。这道题目与 n 皇原创 2016-10-16 21:39:19 · 397 阅读 · 0 评论 -
stamp 邮票设计 搜索02
这道题目和普通的邮票设计不一样,我们可以展示一下题目!邮票【问题描述】邮局发行一套票面有 n(0<n<=10)种不同面值的邮票。若限每封信所贴的邮票张数不得超过 m 枚,存在整数 r 使得用不超过 m(0<m<=2n)枚的邮票,可以贴出连续整数 1,2,3,…,r 值来,找出这种面值数,使得 r 值最大。【输入】一行,输入 N 及 M【输出】输出 R【样例】stamp. in2 3stamp. o原创 2016-10-17 22:17:29 · 603 阅读 · 0 评论 -
皇后问题!
拉拉,今天无聊,装个逼,小发一文。解闷…… 好了具体题目n皇后!! 代码如下:#include<stdio.h>#include<stdlib.h>int n;int ans;int a[100];int ok(int i){ int j; for(j=1;j<i;j++) if(a[i]==a[j] || i-j==abs(a[i]-a[j]))ret原创 2016-10-20 21:07:43 · 387 阅读 · 0 评论 -
USACO Overfencing 穿越栅栏
农夫John 在外面的田野上搭建了一个巨大的用栅栏围成的迷宫。幸运的是,他在迷宫的边界上留出了两段栅栏作为迷宫的出口。更幸运的是,他所建造的迷宫是一个“完美的”迷宫:即你能从迷宫中的任意一点找到一条走出迷宫的路。给定迷宫的宽W(1<=W<=38)及长H(1<=H<=100)。2*H+1行,每行2*W+1的字符以下面给出的格式表示一个迷宫.然后计算从迷宫中最“糟糕”的那一个点走出迷宫所需的步数。(即使原创 2017-06-11 22:28:27 · 858 阅读 · 1 评论 -
6.6解题报告
这次的题目分为4题,解题报告如下(按难度排序): 1.checker Challenge 跳棋的挑战 2.Score Inflation 总分 3.Healthy Holsteins 健康的好斯坦奶牛 4.Overfencing 穿越栅栏原创 2017-06-11 22:08:39 · 303 阅读 · 0 评论 -
温习(一)——快速幂
快速幂,是属于分治的一类习题,其思想如同分治,就是分而治之,所以看到题目的大数据,就要思考如何将大问题拆分成若干个相同解法的小问题,所以推导公式:(a^b)%k=a^(b/2)*a^(b/2)*a(b%2) 所以,这就是这道题目的一般性推导公式,这时程序就写出来了#include<stdio.h>#include<stdlib.h>#include<string.h>#include<m原创 2017-07-04 16:44:27 · 292 阅读 · 0 评论 -
树形DP入门(一)『ツリーとしては』
这次我们谈论的是树形DP,它是一种神奇的动态规划,它的模型建立在树上,所以称之为树形DP。树形DP的成立性:树是一种奇妙的结构,它一定满足最优子结构和无后效性(因为它是树啊!他的状态一定会由它的子树的来[或者说它一定会从它的父节点得来])。树形DP实现的方法:递归!!!因为它是一棵树,所以对应的有两种方式:从根到叶子结点:对应线性结构的从前往后。从叶子结点到根:对应线性结构的从后往前所以采用递原创 2017-09-01 13:09:25 · 353 阅读 · 0 评论 -
9.16考试【广东省选】
作为一只蒟蒻,站在了一大堆大佬之中,所以对于本次考试我没有丝毫的信心,但是我依旧打算来一发题解报告本次考试有四道题目,都是广东省选的老题目,当然有的很水,有的很难,我们按照先易后难的顺序来发表。T4象棋比赛原创 2017-09-16 15:42:01 · 333 阅读 · 0 评论 -
【洛谷】P1582倒水
原题题目描述一天,CC买了N个容量可以认为是无限大的瓶子,开始时每个瓶子里有1升水。接着~~CC发现瓶子实在太多了,于是他决定保留不超过K个瓶子。每次他选择两个当前含水量相同的瓶子,把一个瓶子的水全部倒进另一个里,然后把空瓶丢弃。(不能丢弃有水的瓶子)显然在某些情况下CC无法达到目标,比如N=3,K=1。此时CC会重新买一些新的瓶子(新瓶子容量无限,开始时有1升水),以到达目标。现在CC想知道,最少原创 2017-09-16 15:51:08 · 471 阅读 · 0 评论 -
【洛谷】P1440 求区间最小值
传送门这道题目一眼看去,先想到的必然是暴力,但是数据范围m≤n≤2000000m≤n≤2000000太吓人,所以放弃这个想法,那么我们一步步分析样例是如何得来的:/*6 27 8 1 4 3 2077113*/因为第一个数前面没有数,输出0第二个数之前的最小数为7,输出7第三个数之前2个的最小数为7,输出7第四个数之前2个的最小数为1,输出1第五个数之前2个的最小数为1,输原创 2017-08-29 23:31:19 · 554 阅读 · 0 评论 -
【洛谷】P1120 小木棍[数据加强版]
传送门这道题目因为加强了数据,所以博客以前的题解不能够满足这道题目的时间复杂度,当然还是使用暴力,但是得多一点剪枝。剪枝1:将木棍从大到小排序,这样搜索就可以少一些可能性。剪枝2:从最大的一根木棍开始枚举,一直到木棍长度之和/2,因为最糟糕的情况就是每一根木棍只与自己搭配,所以这种情况在最后输出,再就是两两搭配,所以答案就是总和/2,这样可以减去差不多一半的复杂度。剪枝3:如果前t−1t-1个原创 2017-08-29 22:50:48 · 715 阅读 · 0 评论 -
【NOIOPJ】P7614 最低通行费
原题描述一个商人穿过一个 N*N 的正方形的网格,去参加一个非常重要的商务活动。他要从网格的左上角进,右下角出。每穿越中间1个小方格,都要花费1个单位时间。商人必须在(2N-1)个单位时间穿越出去。而在经过中间的每个小方格时,都需要缴纳一定的费用。这个商人期望在规定时间内用最少费用穿越出去。请问至少需要多少费用?注意:不能对角穿越各个小方格(即,只能向上下左右四个方向移动且不能离开网格)。输入第原创 2017-09-14 19:10:34 · 671 阅读 · 1 评论 -
【洛谷】P1541 乌龟棋
原题题目背景小明过生日的时候,爸爸送给他一副乌龟棋当作礼物。题目描述乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数)。棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起点出发走到终点。乌龟棋中M张爬行卡片,分成4种不同的类型(M张卡片中不一定包含所有4种类型的卡片,见样例),每种类型的卡片上分别标有1、2、3、4四个数字之一,表示使用这种卡片后,乌龟棋子将向前爬行相应的原创 2017-09-13 22:17:01 · 345 阅读 · 0 评论 -
【洛谷】P1540 机器翻译
原题这道题目就是一道十分简单的模拟(这还用说?)#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<algorithm>using namespace std;int flag[1010],a[1010];int main(){ int i,j,k,n,m,ans=0,del原创 2017-09-10 11:59:25 · 887 阅读 · 0 评论 -
关节点及重连通图
这个内容为什么想放在这个时候就放出来呢?因为刚刚才把TOP排序讲完,所以我们跳过关键路径『有什么关联吗?』,直接进入关节点和重联通图。 一、关节点:又称割点,是维系一个图能够连通的节点(就是说没有这个节点,这个图就不连通),若从连通图中删除点V,就会使这个图割裂成多个子图,则称V点为该图的关节点。 二、重连通图:没有关节点的图。【补充:其充分必要条件为任意两点都在一个圈上!】以上是这两个重点的概原创 2017-08-22 23:50:48 · 3439 阅读 · 0 评论 -
『洛谷T7835』士兵站队问题
题目描述有N名士兵(1<=N<=26),编号依次为A,B,C,……进行队列训练时,指挥官要把一些士兵从高到矮依次排成一行,但现在指挥官不能直接获得每个士兵的身高信息,只能获得“P1比P2高”这样的比较结果(P1,P2∈{A,B,…Z},记为P1>P2),如“A>B”表示A比B高。编一程序,根据所得到的比较结果求出符合条件的排队方案。注:比较结果中没有涉及到的士兵不参加排队。例如,设有3个士兵,A、B原创 2017-08-15 21:21:07 · 1107 阅读 · 0 评论 -
拓扑(TOP)排序
今天要讲的是图论之中一个很重要的东西,叫做拓扑排序,又称top排序(下文中使用这个简称),但是我们得先介绍一下AOV网。 如果有想了解官方学术语言的,戳这里。这里,为了方便,我们使用一些简洁的定义,即用顶点表示活动,用边表示活动的先后顺序的有向图。 拓扑排序,是指在AOV网中,把所有的点按照它们的逻辑关系排成一个线性的序列,是每个点的前驱都排在它前面,称之为top序列。方法如下:选择一个入度为原创 2017-08-15 16:08:00 · 2882 阅读 · 0 评论 -
【洛谷】P1626象棋比赛
题目描述有N个人要参加国际象棋比赛,该比赛要进行K场对弈。每个人最多参加两场对弈,最少参加零场对弈。每个人都有一个与其他人不相同的等级(用一个正整数来表示)。在对弈中,等级高的人必须用黑色的棋子,等级低的人必须用白色的棋子。每个人最多只能用一次黑色的棋子和一次白色的棋子。为增加比赛的可观度,观众希望K场对弈中双方的等级差的总和最小。比如有7个选手,他们的等级分别是30,17,26,41,19,38,原创 2017-08-02 23:01:28 · 1337 阅读 · 1 评论 -
矩阵快速幂
矩阵快速幂是一个很神奇的东西,你能够运用它来完成一些普通递推式无法完成的任务,当然了解矩阵快速幂之前,我们要先知道什么是矩阵乘法:矩阵乘法:基本规则:当且仅当两个矩阵的元素个数为n*m和m*k(即前一个矩阵的列与后一个矩阵的行要相等)工作方法:矩阵乘法实现代码如下:#include<bits/stdc++.h>const int Mod=1000000000+7;int n,m,l,p;st原创 2017-07-16 15:26:33 · 461 阅读 · 2 评论 -
乒乓球 codevs1084 洛谷P1042
#include<cstdio>#include<cstring>using namespace std;char s[25];int e=1;int a[10005],b[10005],c[10005],d[10005],t=1,y=1;int main(){ while(scanf("%s",s)!=EOF&&e==1) { int z=strlen原创 2016-10-23 20:29:11 · 657 阅读 · 0 评论 -
选数 codevs1008
#include<stdio.h>#include<stdlib.h>int n,k,x[10001],a[10001];int zs(int x){ if(x==1)return 0; for(int i=2;i*i<=x;i++) if(x%i==0)return 0; return 1;}int ok(){ int ans=0;原创 2016-10-23 20:45:58 · 323 阅读 · 0 评论 -
最近老是忘了冒泡的方法,555,老师让我们“减”起来!
冒泡排序:#include<stdio.h>#include<stdlib.h>int a[100];int main(){ int i,j,k,n,m; scanf("%d",&n); for(i=1;i<=n;i++)scanf("%d",&a[i]); for(i=n;i>1;i--) for(j=1;j<i;j++)原创 2016-10-30 19:27:44 · 306 阅读 · 0 评论 -
广度优先搜索
今天我们来了解一下数据结构队列的附属算法——广搜(BFS) 首先,通过一道简单的水题来了解广搜: 找从城市A到城市H的最短路线,并输出。 这其实不需要懂什么脑子,就是让你熟悉BFS的模板,所以看代码:#include<stdio.h>#include<stdlib.h>#include<string.h>int a[9][9]={{0,0,0,0,0,0,0,0,0},原创 2017-02-09 16:20:17 · 531 阅读 · 0 评论 -
广度优先搜索——神奇的题目们(第一弹)
First,我们请出在OI界风靡一阵的难题,八数码难题(其实说难也不难):#include<stdio.h>#include<stdlib.h>#include<string.h>int a[10],b[10]={0,1,2,3,8,0,4,7,6,5},chan[1000011][10];int pd[10][10][10][10][10][10][10][10]={0};int w[5原创 2017-02-18 11:26:01 · 498 阅读 · 1 评论 -
DP转暴力。神奇的暴力+优化,神奇了我的大暴力——第一弹
大家知道,整数划分是一道经典的DP题目,但是今天我们要用暴力来解决它!:#include<stdio.h>#include<stdlib.h>#include<string.h>int n,m,a[1001],da[1001],b[1001]={0};long long num,ans;char s[1001];int big(){ num=1; for(int i=1;原创 2017-02-25 11:52:28 · 670 阅读 · 0 评论 -
迭代加深搜索初步
迭代加深搜索:这是一种类似广搜的深搜,但是它不需要广搜如此大的空间,它的空间与深搜的空间一样,那么这时问题就来了,迭代深搜怎么实现呢? 我们需要用到一个dep变量(名字可以自己取),用于枚举迭代深搜的深度, 那么从这个图中不难看出,dep枚举的是搜索的深度,一般性一开始都定为1(你也可以随便定一个数),每次累加一般累加1。 迭代加深的应用主要在于这么一道家喻户晓的题目:埃及分数 这道题首先看原创 2017-03-21 22:07:35 · 4968 阅读 · 0 评论 -
综合——3.25
1、三值排序 排序是一种很频繁的计算任务。现在考虑最多只有三值的排序问题。一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌序的时候。在这个任务中可能的值只有三种1,2 和3。我们用交换的方法把他排成升序的。 写一个程序计算出,给定的一个1,2,3 组成的数字序列,排成升序所需的最少交换次数。 样例 输入 9 2 2 1 3 3 3 2 3 1 输出 4#inclu原创 2017-03-25 16:06:20 · 646 阅读 · 1 评论 -
动态规划入门
一、动态规划的定义:动态规划程序设计是一种针对于解决最优化问题的一种途径、一种方法,而不是一种特殊算法,也就是说它没有固定的模板。在动态规划中,每走一步都要看看能不能最优,而且动态规划最擅长的就是多阶段问题!二、动态规划的基本概和基本模型构成: 1. 阶段和阶段变量 2. 状态和状态变量 3. 决策、决策变量和决策允许集合 4. 策略和最优策略 5. 状态原创 2017-04-02 10:25:44 · 1159 阅读 · 1 评论 -
动态规划入门(二)
例1.最长不下降子序列 这没有什么好讲的,就是不断枚举前面的。。。遇到可以更新就更新,最后输出! 见代码#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>using namespace std;int f[100001],p[100001],a[100001];void out(int i){原创 2017-04-08 09:42:29 · 648 阅读 · 0 评论