摘要: 网络流的基本算法——绝恋love枫引言 过去听起来高深莫测的网络流算法,现在已飞入寻常百姓家了,对于每一个OIER,网络流是一个神圣的东西(个人见解),但神圣的同时,它并不是那样抽象,最形象的模型就是水流,从长江源点无限的向外流水,而大海(汇点)则在不断地‘喝水’,当然,你也可以不把它想成水,或者是其他一切可以流动的东西。而事实上,有些东西的流动比较流畅,而某些东西可能相对而言比较粘稠,流速更慢,因此,就产生了一个问题,单位时间内的总流量最多多少,这里会根据流速给定单位时间内的流量,这就是最先开启网络流之门的最大流算法,它的解决方式将在后面谈到,再想一下,如果水管是另一个物流公司所有... 阅读全文
posted @ 2011-10-20 15:31 Codinginging 阅读(4563) 评论(1) 推荐(4) 编辑
摘要: 前言有些问题,时刻需要知道问题的当前状态,所以需要的每一个状态进行保存,而在计算机中,简洁快速的二进制受到大家表示状态时的青睐,最近在学习中总结了一下状态压缩,它不仅应用于我们常提的DP,在其他算法解决问题是也能起到不同凡响的作用。正文在一个需要描述的对象有两种不同的状态时,通常采用二进制数来表示,0,1分别表示两种不同的状态,这就做到了对问题的足够抽象,使下面的操作更为简洁。空谈说不出来什么,下面直接进入实战(不懂位运算的先补一下)。问题一:TSP 经典问题一个N个点的带全有向图,求一条路径,进过该图上的各个点一次且仅一次,并且路径上的边权值之和最小(或最大)。※n<=16.<- 阅读全文
posted @ 2011-10-19 21:25 Codinginging 阅读(2563) 评论(1) 推荐(1) 编辑
摘要: 第一题,能量项链,比较经典的合并类动态规划,个人认为最简明的方程是f[i,j]=Max{f[i,j],f[i,k]+f[k+1,j]+a[i]*a[k+1]*a[j]},但这样写的话动归的循环没有办法实现,为了思维的简明,本人义无反顾的写下了记忆化搜索,效率没什么损失,都是0.01s出解,从这道题里也可以总结出一些什么,比如状态的分部规则性不明显时或者想出了动态方程但循环边界却十分纠结,记忆化搜索也是不错的选择,当然有些题目可以运用类似广度优先搜索的记忆化,属于正推,也有深搜的记忆化,其实它们本质上没有什么区别,都是状态的一些整合而已,动态规划题目并不难,看清实质就能行。View Code . 阅读全文
posted @ 2011-10-17 17:55 Codinginging 阅读(1247) 评论(1) 推荐(3) 编辑
摘要: 第一题,数字统计,很water的题目,要是有人傻乎乎的用桶排,我也没办法,直接上代码。View Code 1 Program Count(Input,Output); 2 Type 3 Numbertype = Array[0..200000] Of Longint; 4 Var 5 N1,I1,S : Longint; 6 A : Numbertype; 7 Procedure Swap(Var A1,A2: Longint); 8 Var 9 T:Longint;10 Begin11 T:=A1;12 A1:=A2;13 A2:=T;... 阅读全文
posted @ 2011-10-16 18:14 Codinginging 阅读(2360) 评论(2) 推荐(4) 编辑
摘要: 一.潜伏者(有一一对应的特殊错误关系,可用代码中二重循环判断)View Code 1 program spy(input,output); 2 var a:array['A'..'Z'] of char; 3 i,j:longint; 4 s1,s2,s3:ansistring; 5 ch:char; 6 begin 7 assign(input,'spy.in');reset(input); 8 assign(output,'spy.out');rewrite(output); 9 fillchar(a,sizeof(a),&# 阅读全文
posted @ 2011-10-13 16:56 Codinginging 阅读(1215) 评论(0) 推荐(3) 编辑