自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 网络流(最大流)基础入门

好不容易大概搞懂了网络流,写个博客巩固一下 **定义 网络流与最大流**网络流是指给定一个有向图,和两个点–源点S和汇点T,点之间有连边, 每条边有一个容量限制,可以看作水管,网络流就是指由S点流到T点的一个可行流。 最大流就是指所有可行流里面最大的流。通俗的讲,就是由若干个运货点,一个是起点,一个是终点,有一些运货点由路相连,每条路有容量限制,走过那条路时运送的货物不能超过其中的容量限制,求

2017-07-11 09:45:39 10774 8

原创 线段树基础入门详解(适用于初学者)

由于以前看多了各种博客,关于线段树的讲解总是十分冗长,因此特此作文,大概讲解基本概念及操作,适用于初学者。初次写博,多多包涵一、线段树的概念 线段树在各个节点保存一条线段(数组中的一段子数组),主要用于高效解决连续区间的动态查询问题,由于二叉结构的特性,它基本能保持每个操作的复杂度为O(logn)。(看不懂不用管,没啥用) 这个图是线段树求数组array[2, 5, 1, 4, 9, 3]的区间最小和的例子(

2017-07-10 16:18:58 586

原创 NOIP2017提高组D2T1 奶酪 解析

这显然是一道并查集(如果没有学过并查集的童鞋还是去找找别的博客吧)思路比较简单,就是如果两个洞相交(或相切),就把它们连入一个集合,可以想象一个集合就是一条通道我们只需要判断每一条通道是否存在元素与底部、顶部相连即可。如果都有,那么输出Yes那么问题来了,如何判断两个球是否相交(切)呢?其实如果你数学很好、做题经验丰富 ,你就会知道了:如果两个球的半径之和>=两个球球心的距离,那么...

2018-10-17 16:52:19 414

原创 NOIP 1999导弹拦截

#include <iostream>#include <cstring>#include <cstdio>using namespace std;int f[100005],n=1,m[100005],maxn=0;void init(){ for (int i=1;i<=n;i++){ f[i]=1; } maxn=0;}int main(){

2017-10-06 17:15:29 492

原创 NOIP 2006普及组 明明的随机数详解

1.思路这道题就是一道桶排序,或称基数排序 算法基本思路:用数组num[i]来表示数值为i的数出现了多少次,例:若读入一数3,则num[3]++;读入一数10,则num[10]++最后从1开始循环整个num数组,把出现了1次或以上的数(也就是num值不为0的数)全部输出,输出结果正好就是按数值顺序从小到大排好序的放到这道题中,因为题目只是要求把不重复的数顺序输出,所以我们甚至不需要计算次数,只用把

2017-10-06 15:57:21 815

原创 NOIP 2005普及组 采药 详解

思路简单的01背包裸题(如果不知道什么是01背包的话去搜一搜),用f[j]表示时间为j时的最优解 需要注意的是如果用一维,第二层循环内的j一定要从大到小逆推。因为当我们枚举到i,假设此时正在求解f[6],我们需要用带到上一层的f[3]的值。如果是顺序枚举的话,那么第i-1层的f[3](也就是不能取第i株草药的f[3])的值很可能已经被第i层的f[3](也就是能取第i株草药的f[3])的值所覆盖了(

2017-10-05 17:35:41 1062

原创 NOIP 2002普及组 过河卒详解

本文图片引用自“kcfzyhq”的博客1.分析首先我们来看看下面这个图,这个图基本表现了题目的意思:一个卒要从图的左上角A点走到右下角B点,而其中有一点C为马的位置,C与其周边马能走到的P1~P8点共9个点是不能走的,问有多少种从A走到B的方法我们可以先把这个问题当数学问题来考虑相信许多朋友以前都遇到过类似的数学问题,对于点[i,j],它的走法数等于它上方点与其左方点走法数之和(因为只能向下或向右走

2017-10-05 15:53:55 3810 3

原创 NOIP 2010普及组 数字统计

#include <iostream>#include <cstdio>using namespace std;int main(){ int l,r,tmp,ans=0; cin>>l>>r; for (int i=l;i<=r;i++){ tmp=i; while (tmp>0){ if (tmp%10==2)

2017-09-17 17:16:48 351

原创 Vijos1375 大整数

#include <cstdio>#include <cstring>#include <algorithm>#define clp(s,ss) memcpy(s,ss,sizeof(ss)) using namespace std;const int N=500;char pr[N];int a[N],b[N],c1[N],c2[N],c3[N],d[N],f[N],s[N],ans

2017-09-04 13:56:29 214

原创 Vijos1334 NASA的食物计划

#include <iostream>#include <cstring> using namespace std;int a[1001],b[1001],c[1001],f[1001][1001];int main(){ memset(f,0,sizeof(f)); int i,j,k,l,n,m; cin>>m>>k; cin>>n; for(i=1

2017-09-04 13:55:34 226

原创 NOIP 2015提高组 跳石头

#include <iostream>#include <cstdio>#define MAXN 100000using namespace std;int l,n,m,ans;int stone[MAXN];bool check(int mins){ int k=0,count=0; for (int i=1;i<=n;i++){ if (stone[i]

2017-09-04 13:15:21 206

原创 NOIP 2012提高组 借教室

二分答案+差分+前缀和#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define maxn 1000005using namespace std;int a[maxn],d[maxn],s[maxn],j[maxn],t[maxn];int n,m;bool can(int num)

2017-09-03 15:47:16 321

原创 NOIP 2015提高组 跳石头

这是一道二分水题#include <iostream>#include <cstdio>#define MAXN 100000using namespace std;int l,n,m,ans;int stone[MAXN];bool check(int mins){ int k=0,count=0; for (int i=1;i<=n;i++){ if (

2017-09-03 15:15:19 310

原创 最长公共子序列LCS C++实现

#include <iostream>#include <cstdio>#include <cstring>using namespace std;char a[1005],b[1005];int f[1005][1005];int main(){ scanf("%s",a+1); scanf("%s",b+1); int lena=strlen(a+1);

2017-08-27 16:39:16 400

原创 洛谷1594 护卫队(动态规划) 解析

题目护卫车队在一条单行的街道前排成一队,前面河上是一座单行的桥。因为街道是一条单行道,所以任何车辆都不能超车。桥能承受一个给定的最大承载量。为了控制桥上的交通,桥两边各站一个指挥员。护卫车队被分成几个组,每组中的车辆都能同时通过该桥。当一组车队达到了桥的另一端,该端的指挥员就用电话通知另一端的指挥员,这样下一组车队才能开始通过该桥。每辆车的重量是已知的。任何一组车队的重量之和不能超过桥的最大承重量。

2017-08-27 15:50:28 1046

原创 NOIP 2000普及组 乘积最大 详解

经典DP题,f[i][j] 表示在前i个数字中插入j个乘号时的最大乘积,num[i][j]表示从第i个字符到第j个字符之间的数字,i从0开始 状态转移方程:f[i][j]=max(f[k][j-1]*num[k][i-1]),1<=k#include <iostream>#include <iomanip>#include <cstring>#include <algorithm>usin

2017-08-20 16:12:57 1495

原创 NOIP 2001普及组 最小公倍数和最大公约数问题 详解

这道题一看上去就是一道十分简单的枚举搜索题,本来还以为要做些精巧操作才能过,后来发现直接暴力枚举就行了,原码如下:#include <iostream>#include <cstdio>#include <cstring>using namespace std;bool gcd(int a,int b,int divider)//判断最大公约数{ int tmp=min(a,b);

2017-08-19 18:28:42 1178

原创 高精度乘法入门详解(高精乘高精)

高精度乘法。输入两个正整数,求它们的积。【算法分析】类似加法,可以用竖式求乘法。在做乘法运算时,同样也有进位,同时对每一位进行乘法运算时,必须进行错位相加,如图3、图4。 分析c数组下标的变化规律,可以写出如下关系式:ci = c’i +c”i +…由此可见,c i跟a[i]*b[j]乘积有关,跟上次的进位有关,还跟原c i的值有关,分析下标规律,有c[i+j-1]= a[i]*b[j]+ x

2017-08-19 17:49:02 30952 8

原创 高精度减法入门详解

高精度减法输入两个正整数,求它们的差。 【算法分析】 类似加法(如果是没有学过加法的同学,参照博客高精度加法入门详解) 同样可以用竖式求减法。在做减法运算时,需要注意的是:被减数必须比减数大,同时需要处理借位。高精度减法的参考程序:#include<iostream>#include<cstdio>#include<cstring>using namespace std;int mai

2017-08-19 17:44:51 822

原创 高精度加法入门详解

高精度加法输入两个正整数,求它们的和。 【分析】 输入两个数到两个变量中,然后用赋值语句求它们的和,输出。但是,我们知道,在C++语言中任何数据类型都有一定的表示范围。而当两个被加数很大时,上述算法显然不能求出精确解,因此我们需要寻求另外一种方法。在读小学时,我们做加法都采用竖式方法,如图1。 这样,我们方便写出两个整数相加的算法。 如果我们用数组A、B分别存储加数和被加数,用数组C存储结

2017-08-19 17:39:40 1620

原创 NOIP 2005提高组 过河(状压DP) 详解

题目描述在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,……,L(其中L是桥的长度)。坐标为0的点表示桥的起点,坐标为L的点表示桥的终点。青蛙从桥的起点开始,不停的向终点方向跳跃。一次跳跃的距离是S到T之间的任意正整数(包括S,T)。当

2017-08-13 17:08:20 912

原创 NOIP 2001普及组 装箱问题详解

这道题是01背包的经典例题核心保存状态的数组f[],f[i]表示容量为i时的最优解 两重循环,第一层枚举物品,第二层枚举所有容量,而状态转移方程的核心就是选不选择这种物品两种情况,f[i]就相当于不选,保持原来的状态;f[i-a[i]]+a[i]相当于选,就是把当前容量v-当前物品体积a[i]时的最优解加上当前物品体积

2017-08-13 15:37:23 1900

原创 NOIP 2006提高组 能量项链

经典环形dp问题#include <iostream>#include <cstring>#include <cmath>using namespace std;int lenght=0,DG[2005][2005]={0};int li[2005][2]={0};int DP(int lf,int rt);int main(void){ cin>>lenght; for(int i

2017-08-12 18:29:12 272

原创 NOIP 2008普及组 立体图

对于正在做这道题的同学,我遗憾地告诉你们,这道题就是坑倒dalao,防止AK(虽然08年好像还是有人AK了,orz)的纯模拟题,没有任何算法或者技巧。但是请不要绝望,我写出来也就是那么一个通宵的时间,下面附上源码,给予你们些许慰藉#include <iostream> #include <cstdio>#include <cstring>using namespace std;char c[2

2017-08-12 17:07:12 854

原创 NOIP 2007普及组 守望者的逃离 DP详解

题目描述恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变。守望者 在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上。为了杀死守望者,尤迪安开始对这 个荒岛施咒,这座岛很快就会沉下去。到那时,岛上的所有人都会遇难。守望者的跑步速度为 17m/s,以这样的速度是无法逃离荒岛的。庆幸的是守望者拥有闪烁法术,可在1s内移动60m,不 过每次使用闪烁法术都会消耗魔法值10点

2017-08-12 16:18:52 760

原创 POJ 3281 Dinging(网络流最大流)解析

一、题目Description Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, and she will consume no others. Farmer John has cooked fabulous meals for his cows, but he forgot

2017-07-11 17:27:54 287

原创 [USACO4.2]草地排水(网络流最大流模板)

附上注释代码#include<iostream>#include<cstdio>#include<queue>#include<cstring>using namespace std;/*const&int*/const int maxline=201;const int maxnode=201;int n,m;int ans;/*lsqqx*/struct nn{

2017-07-11 10:03:40 367

原创 堆优化dijkstra bzoj2143飞飞侠

附上源码:#include#include#include#include#include#include#define ll long long#define inf 1000000000using namespace std;inline int read(){    int x=0,f=1;char ch=getchar();    whi

2017-07-10 16:00:57 228

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除