摘要:题意:给你一个N行M列的矩阵,其中“.”代表空地,“H”代表房子,“m”代表人,其中有n个房子和n个人。现在要求每个人进入一间房子,且人走一步需要支付1美元。求最小需要花费多少美元才能让所有人都进入到房子中(每个人只能进入一间房子,每个房子只能容纳一个人)。建图思路与安排工作那道题一样,设置一个超级...
阅读全文
摘要:学了几天的网络流,感觉还是ISAP算法比较实用,用这道题整理了一下,可以当作模版题意:给出n个任务+m台机器,还有一个任务处理时限+开始时间+结束时间,一个时刻里一台机器只能处理一个任务,但是一个任务可以在不同机器处理,问能否处理完所有任务?方法:最大流。这个题的建图算是经典,因为限定每个时刻每台机...
阅读全文
摘要:就是由于下大雨的时候约翰的农场就会被雨水给淹没,无奈下约翰不得不修建水沟,而且是网络水沟,并且聪明的约翰还控制了水的流速,本题就是让你求出最大流速,无疑要运用到求最大流了。题中N为水沟数,M为水沟的顶点,接下来Si,Ei,Ci分别是水沟的起点,终点以及其容量。求源点1到终点M的最大流速。ek:#in...
阅读全文
摘要:题意:先给你一张你n * n的图,代表城市间的距离,然后,给出n个tax的费用,然后很多询问,问你a到b的最少费用,并且打印路径(字典序) 注意tax的费用起点和终点不算 floyd求字典序路径: 逆序spfa:
阅读全文
摘要:题目大意:一个笨蛋要坐车去朋友家,但坐车呕吐,所以想在最短时间内到达。测试数据意思:第一行三个数:n(车站的个数,n#include #include #include #include #include #include #include using namespace std;#define i...
阅读全文
摘要:Problem Description在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?Input输 入包括多组数据。每组数据第一行是两个整数...
阅读全文
摘要:Problem Description Now, here is a fuction: F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 #include #include #include #include #include #include using namesp...
阅读全文
摘要:Problem Description某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。Input测试输入包含若...
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1102把已经修建的城市之间值赋0,然后prim。。。#include #include #include #include #include #include #include using namespace st...
阅读全文
摘要:这类题目会询问区间中满足条件的连续最长区间,所以PushUp的时候需要对左右儿子的区间进行合并题意:1 a:询问是不是有连续长度为a的空房间,有的话住进最左边2 a b:将[a,a+b-1]的房间清空思路:记录区间中最长的空房间线段树操作:update:区间替换 query:询问满足条件的最左断点#...
阅读全文
摘要:题意:在墙上贴海报,海报可以互相覆盖,问最后可以看见几张海报思路:这题数据范围很大,直接搞超时+超内存,需要离散化:离散化简单的来说就是只取我们需要的值来用,比如说区间[1000,2000],[1990,2012] 我们用不到[-∞,999][1001,1989][1991,1999][2001,2...
阅读全文
摘要:题意:一个数列,每次操作可以是将某区间数字都加上一个相同的整数,也可以是询问一个区间中所有数字的和。(这里区间指的是数列中连续的若干个数)对每次询问给出结果。#include #include #include #include #include #include #include using na...
阅读全文
摘要:题意:胖子有一条大jb,大JB由n个小JB组成,每次操作将一个区间的小JB变成金银铜三者之一,最后取出所有区间的JB总价值思路:和刷气球差不多意思了,简单的区间更新,无需更新到叶子节点,防止超时#include #include #include #include #include #include...
阅读全文
摘要:题意:h*w的木板,放进一些1*L的物品,求每次放空间能容纳且最上边的位子思路:每次找到最大值的位子,然后减去L线段树功能:query:区间求最大值的位子(直接把update的操作在query里做了)#include #include #include #include #include #incl...
阅读全文
摘要:这题用树状数组写要简单很多,因为我学习线段树,找了这个题入门。。#include #include #include #include #include #include #include using namespace std;#define M 200005#define ls node>1; ...
阅读全文
摘要:题意:有n件商品,每件可买多次,共m元钱,买每种物品,都会得到x*a[i]+b[i]个糖(x为购买的数量),问最多可得到多少糖。分析:完全背包,多比较一下当前是否是第一次购买。所以有三种状态取最优。#include #include #include #include #include #inclu...
阅读全文
摘要:这题用树状数组写要简单很多,因为我学习线段树,找了这个题入门。。#include #include #include #include #include #include #include using namespace std;#define M 50005#define ls node>1; ...
阅读全文
摘要:参考 http://blog.csdn.net/metalseed/article/details/8039326 一:线段树基本概念1:概述线段树,类似区间树,是一个完全二叉树,它在各个节点保存一条线段(数组中的一段子数组),主要用于高效解决连续区间的动态查询问题,由于二叉结构的特性,它基本能保持...
阅读全文
摘要:void gcd(int a,int b,int &d,int &x,int &y){ if(!b) { d=a; x=1; y=0; } else { gcd(b,a%b,d,y,x); y-=x*...
阅读全文
摘要:参考 http://www.cnblogs.com/Phantom01/p/3957897.htmlDP的方向真的很重要,这题做的时候死活想不出来,看了题解以后恍然大悟原来这么简单。题意:有n层堆成金字塔状的球,若你要选一个球,你必须把它上面那两个球取了,当然也可以一个不取。求选的球最大的权值和。题...
阅读全文
摘要:问题描述:有n种硬币,面值分别为v1,v2,v3...vn,每种硬币有无限多,给定非负整数s,可以选用多少个硬币,使得面值之和恰好为s?输出硬币数目的最小值和最大值,并且输出各自的选取方案(如果有多种方案,则输出硬币编号字典序较小的方案,输出每种选取方案的面值)。1#include #include...
阅读全文
摘要:转自 http://blog.csdn.net/achiberx/article/details/8688759描述有n个矩形,每个矩形可以用a,b来描述,表示长和宽。矩形 X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a#include #include #include #include #i...
阅读全文
摘要:题目描述:有N个数,每次从左到右选取M个数,第一行选取每个区间中的最小值输出,第二行选取最大值并输出。#include #include #include #include #include #include using namespace std;#define M 1000005int n,k,...
阅读全文
摘要:详情请见http://blog.csdn.net/int64ago/article/details/7425727//二分查找(找到返回左端,找不到返回右端)int bSearch(int x,int y,int g){ int mid,l=x,r=y; while(l>1; ...
阅读全文
摘要:题意:给出一个长度为n的序列A1,A2,...,An,求最大连续和。int maxsum(int *A,int x,int y)//返回数组在左闭右开区间[x,y)中的最大连续和{ int v,l,r,maxs; if(y-x==1) return A[x];//只有一个元素,直接返回 ...
阅读全文
摘要:typedef long long LL;const int MOD=1e9+7;LL quick_mod(LL a,LL b){ LL ans=1; a%=MOD; while(b) { if(b&1) { ans=ans*...
阅读全文
摘要:// m^n % kint quickpow(int m,int n,int k){ int b = 1; while (n > 0) { if (n & 1) b = (b*m)%k; n = n >> 1 ; m = (m...
阅读全文
摘要:#define X 1000010int s[X];void make(){ int i,j; for(i=2;i<X;i++) if(!s[i]) for(j=i;j<X;j+=i) s[j]=i;}void qiu(i...
阅读全文
摘要:const int M=1000;bool mark[M];void judge(){ memset(mark,true,sizeof(mark)); mark[0]=mark[1]=false; for(int i=2;i*i<=M;i++) { if(mar...
阅读全文
摘要:问题描述: 在一个2k x 2k ( 即:2^k x 2^k )个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。 这里我们用分...
阅读全文
摘要:链接:http://poj.org/problem?id=2352题目大意:在坐标上有n个星星,如果某个星星坐标为(x, y), 它的左下位置为:(x0,y0),x0#include #include #include #include using namespace std;#define MAX...
阅读全文