
题目解析
lzoi_hmh
蒟蒻一枚
展开
-
堆优化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 · 262 阅读 · 0 评论 -
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 · 238 阅读 · 0 评论 -
洛谷1594 护卫队(动态规划) 解析
题目护卫车队在一条单行的街道前排成一队,前面河上是一座单行的桥。因为街道是一条单行道,所以任何车辆都不能超车。桥能承受一个给定的最大承载量。为了控制桥上的交通,桥两边各站一个指挥员。护卫车队被分成几个组,每组中的车辆都能同时通过该桥。当一组车队达到了桥的另一端,该端的指挥员就用电话通知另一端的指挥员,这样下一组车队才能开始通过该桥。每辆车的重量是已知的。任何一组车队的重量之和不能超过桥的最大承重量。原创 2017-08-27 15:50:28 · 1129 阅读 · 0 评论 -
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 · 388 阅读 · 0 评论 -
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 · 346 阅读 · 0 评论 -
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 · 360 阅读 · 0 评论 -
NOIP 2002普及组 过河卒详解
本文图片引用自“kcfzyhq”的博客1.分析首先我们来看看下面这个图,这个图基本表现了题目的意思:一个卒要从图的左上角A点走到右下角B点,而其中有一点C为马的位置,C与其周边马能走到的P1~P8点共9个点是不能走的,问有多少种从A走到B的方法我们可以先把这个问题当数学问题来考虑相信许多朋友以前都遇到过类似的数学问题,对于点[i,j],它的走法数等于它上方点与其左方点走法数之和(因为只能向下或向右走原创 2017-10-05 15:53:55 · 4144 阅读 · 3 评论 -
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 · 1143 阅读 · 0 评论 -
NOIP 2006普及组 明明的随机数详解
1.思路这道题就是一道桶排序,或称基数排序 算法基本思路:用数组num[i]来表示数值为i的数出现了多少次,例:若读入一数3,则num[3]++;读入一数10,则num[10]++最后从1开始循环整个num数组,把出现了1次或以上的数(也就是num值不为0的数)全部输出,输出结果正好就是按数值顺序从小到大排好序的放到这道题中,因为题目只是要求把不重复的数顺序输出,所以我们甚至不需要计算次数,只用把原创 2017-10-06 15:57:21 · 924 阅读 · 0 评论 -
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 · 262 阅读 · 0 评论 -
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 · 243 阅读 · 0 评论 -
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 · 1546 阅读 · 0 评论 -
[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 · 412 阅读 · 0 评论 -
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 · 335 阅读 · 0 评论 -
NOIP 2007普及组 守望者的逃离 DP详解
题目描述恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变。守望者 在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上。为了杀死守望者,尤迪安开始对这 个荒岛施咒,这座岛很快就会沉下去。到那时,岛上的所有人都会遇难。守望者的跑步速度为 17m/s,以这样的速度是无法逃离荒岛的。庆幸的是守望者拥有闪烁法术,可在1s内移动60m,不 过每次使用闪烁法术都会消耗魔法值10点原创 2017-08-12 16:18:52 · 811 阅读 · 0 评论 -
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 · 911 阅读 · 0 评论 -
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 · 313 阅读 · 0 评论 -
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 · 1261 阅读 · 0 评论 -
NOIP 2001普及组 装箱问题详解
这道题是01背包的经典例题核心保存状态的数组f[],f[i]表示容量为i时的最优解 两重循环,第一层枚举物品,第二层枚举所有容量,而状态转移方程的核心就是选不选择这种物品两种情况,f[i]就相当于不选,保持原来的状态;f[i-a[i]]+a[i]相当于选,就是把当前容量v-当前物品体积a[i]时的最优解加上当前物品体积原创 2017-08-13 15:37:23 · 1974 阅读 · 0 评论 -
NOIP 2005提高组 过河(状压DP) 详解
题目描述在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,……,L(其中L是桥的长度)。坐标为0的点表示桥的起点,坐标为L的点表示桥的终点。青蛙从桥的起点开始,不停的向终点方向跳跃。一次跳跃的距离是S到T之间的任意正整数(包括S,T)。当原创 2017-08-13 17:08:20 · 955 阅读 · 0 评论 -
NOIP2017提高组D2T1 奶酪 解析
这显然是一道并查集(如果没有学过并查集的童鞋还是去找找别的博客吧)思路比较简单,就是如果两个洞相交(或相切),就把它们连入一个集合,可以想象一个集合就是一条通道我们只需要判断每一条通道是否存在元素与底部、顶部相连即可。如果都有,那么输出Yes那么问题来了,如何判断两个球是否相交(切)呢?其实如果你数学很好、做题经验丰富 ,你就会知道了:如果两个球的半径之和>=两个球球心的距离,那么...原创 2018-10-17 16:52:19 · 461 阅读 · 0 评论