自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Pengwill's Blog

一百年太短,只争朝夕

  • 博客(47)
  • 资源 (2)
  • 收藏
  • 关注

原创 POJ3259 Wormholes (BellmanFord)

题意分析给出图,图中有边权为正的双向边和边权为负的单向边,求到某一点的值能否为负。 利用BellmanFord判断负环即可。代码总览#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int nmax = 3000;const int ...

2018-03-28 22:50:38 175

原创 POJ1860 Currency Exchange (BellmanFord)

题意分析给出货币相互对换的汇率,求经过若干次对换之后,能否使得原来的货币变多。将每种货币看做成一个点,将对换看做是边,使用BellmanFord判断是否含有正环即可。 因为正环的含义就是,可以多次走这个环,使得每次对换后相应的货币变多。代码总览#include<cstdio>#include<cstring>#include<algori...

2018-03-28 22:46:14 238

原创 基环树动态规划

基环树DP基环树定义先回忆一下普通树结构有哪些特性: 1. N个点 N-1条边。 2. 没有父节点的节点称为根节点,除根节点外每个几点都有一个父节点。基环树可以理解为: 1. 有N个点N条边 2. 在原来一颗树的基础上,添加一条边,那么就是基环树了同理,在基环树上的环中,删掉一条边,那么就是一颗普通树了。 也正是利用这个特性,在基环树上进行动态规划。基环树如何进行DP...

2018-03-27 22:23:24 912

原创 洛谷P1352 没有上司的舞会(DP)

题意分析树形DP入门题目。 树形DP其实和普通的DP区别就在于转移的方式。 普通的DP的状态转移是在一张表上,表的坐标表示不同的状态。而树形DP由于其特殊性,即题目中描述的关系满足树形的结构,所以利用树形结构进行状态的转移。 由于是在树上进行状态转移,所以DFS是必不可少的。对于这道题来说,关系正好是一棵树,并且可以明确的是,如果选择了父节点,那么其子节点就不能选择;如果不选择其父节...

2018-03-27 21:58:55 203

原创 洛谷P1004 方格取数(DP)

题意分析和P1006 差不多。 区别就是如果取走了数字,要归0,而且可以走相同的格子。 状态的定义和传纸条是一样的 。直接n4n4n^4的循环,然后就OK了。 注意如果是转移到同一个地方,那么这一个方格子的值只能加一次。代码总览#include<bits/stdc++.h>using namespace std;const int nmax = 60...

2018-03-24 21:34:59 289

原创 洛谷P1006 传纸条 (DP)

题意分析一开始想的是进行两遍DP,这样明显是错误的,因为会有重复走的位置,这是不符合题意的。 然后看题解,很多写的是双线程DP,我不太感觉的出来。其实想一下,因为有两个人要描述这两个人的状态,那肯定是分别用他们在平面的坐标,这是最直接的。 dp[x1][y1][x2][y2]dp[x1][y1][x2][y2]dp[x1][y1][x2][y2] 表示A走到(x1,y1)(x1,y1)(x...

2018-03-24 21:23:43 456

原创 Vijos 1431 守望者的逃离(贪心+DP)

题意分析看到题DP状态还是十分好设计的。 dp[i][j]dp[i][j]dp[i][j] 表示当前时刻iii,剩余魔法jjj 所能逃离的最大距离。 状态转移方程为: dp[i][j]=max(dp[i−1][j−4],dp[i−1][j+10]+60,dp[i−1][j]+17)dp[i][j]=max(dp[i−1][j−4],dp[i−1][j+10]+60,dp[i−1][j]+...

2018-03-23 11:45:06 299

原创 RQNOJ273 马棚问题(DP)

题意分析状态设计dp[i][j]dp[i][j]dp[i][j] 表示对于前i个马棚, 装前j匹马的不愉快系数的最小值。状态转移方程dp[i][j]=min(dp[i][j],dp[i−1][k]+cost[k+1][j])dp[i][j]=min(dp[i][j],dp[i−1][k]+cost[k+1][j])dp[i][j] = min(dp[i][j], dp[i-1]...

2018-03-18 22:59:02 469

原创 RQNOJ28 愚蠢的宠物(LCA / 并查集)

题意分析其实是一道裸地最近公共祖先的题目,但是还是可以用并查集水过去。怎么水呢? 合并时记录一下深度,默认节点1深度为0。 最后要求两个节点的最近公共祖先,那么首先让深度大的那个节点总下往上找,最后一定是回到根节点1,在网上找的过程中,一边找一边记录一下经过哪些了节点,用bool数组保存。 然后让另外一个深度比较小的节点找根节点,如果在途中遇到了第一个节点经过到的节点,直接返回即可。...

2018-03-17 22:39:00 272

原创 RQNOJ 166 免费午餐 (最长递增子序列 nlogn)

题意分析要用nlogn的算法 ,否则会被卡死代码总览#include<bits/stdc++.h>using namespace std;const int nmax = 100005;int a[nmax];int dp[nmax];int main(){ int n; while(scanf("%d",&n)!=EOF){ ...

2018-03-17 22:09:06 211

原创 洛谷P1823 音乐会的等待 (单调栈)

题意分析对于给出的序列,要处理的是其左边、右边能够看到的人数是多少。 如果我们两边同时计算的话,计算起来就会十分的混乱,最好的办法就是只计算一边的。我这里选择计算左边。首先理清思路,我们要统计对于序列中的某个元素list[i],在其左边能看到的他的人数个数。 在他左边能看到他的人,身高一定 >= list[i], 最朴素的做法就是从他的位置向左扫描,统计人数。复杂度n2n2n^2 ...

2018-03-17 21:04:35 1246

原创 目录和导航

持续更新中……题解和代码都放在CSDN中http://www.pengwill.top/record/

2018-03-15 22:04:42 289

原创 JoyOI1062 合并傻子(环形DP)

题意分析其实就是环形的式子合并代码总览#include<bits/stdc++.h>using namespace std;const int nmax = 255;int sum[nmax];int a[nmax];int dp[nmax][nmax],dp2[nmax][nmax];int n,m;int main(){ while(sca...

2018-03-15 21:58:19 192

原创 洛谷P1880 石子合并(环形石子合并 区间DP)

题意分析就是在普通的石子合并的基础上,改成环形的而已。 转移方程依旧是dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+sum[i][j])dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+sum[i][j]) dp[i][j] = max(dp[i][j], dp[i][k] +dp[k+1][j] + sum[i][j]...

2018-03-15 21:53:25 503 1

原创 洛谷P2196 挖地雷

题意分析仔细看题 其实就是数塔问题的变种,多了一个能否访问的条件。 所以就按照他的思路来就行了,多一个way来保存两个地点是否能够到达。关于选择的输出,用path数组保存前驱即可,代码总览#include<bits/stdc++.h>using namespace std;const int nmax = 25;int mine[nmax];int wa...

2018-03-13 19:23:52 364

原创 UVA 437 The Tower of Babylon (DP)

题意分析状态设计dp[i][j]dp[i][j]dp[i][j]表示搭第i层方块,以j为顶的时候,最大高度。状态转移方程dp[i][k]=max(dp[i][k],dp[i−1][j]+bc[k].h)dp[i][k]=max(dp[i][k],dp[i−1][j]+bc[k].h)dp[i][k] = max(dp[i][k], dp[i-1][j] + bc[k].h)伪代...

2018-03-13 19:15:38 176

原创 洛谷 P1149 火柴棒等式(模拟)

题意分析暴力枚举代码总览#include<bits/stdc++.h>using namespace std;const int nmax = 1000;int cnt[] = {6,2,5,5,4,5,6,3,7,6};int n;int get(int x){ if(x == 0) return 6; int tot = 0; ...

2018-03-11 22:22:23 572

原创 RNQOJ 290 破碎的项链 (模拟)

题意分析注意循环问题,模拟即可。代码总览#include<bits/stdc++.h>using namespace std;const int nmax = 1000;char str[nmax<<1];int main(){ int n; while(scanf("%d",&n)!=EOF){ scan...

2018-03-11 22:20:41 487

原创 洛谷P1077 摆花(DP)

题意分析状态设计 dp[i][j]dp[i][j]dp[i][j] 表示前i盆花,摆放前j种花的方案数状态转移for i: 0 to m for j: 0 to n for k: 0 to a[j] dp[i][j] += dp[i-k][j-1]注意开始循环起始值初始状态for i: 0 to a[1] dp[...

2018-03-11 22:18:19 330

原创 Vijos 1485 传球游戏 (DP)

题意分析状态设计: dp[i][j]dp[i][j]dp[i][j] 表示传递i次传到j位置的方案总数状态转移: dp[i][j−1]+=dp[i][j]dp[i][j−1]+=dp[i][j]dp[i][j-1] += dp[i][j] dp[i][j+1]+=dp[i][j]dp[i][j+1]+=dp[i][j]dp[i][j+1] += dp[i][j]初始状态 dp...

2018-03-11 22:12:32 264

原创 洛谷P1064 金明的预算方案(DP)

题意分析变形背包 对于每种商品有5种决策 不买 买主件 买主件+1号附件 买主件+2号附件 买主件+1号和2号附件 对于5种决策分别DP即可代码总览#include<bits/stdc++.h>using namespace std;const int nmax = 35000;const int mmax = 100;int mainv[mm...

2018-03-11 22:08:19 195

原创 POJ 1088 滑雪 (DP)

题意分析一开始用的dfs 果断超时后来想了一下,用DP是否可行 这样思考,首先从高到低给所有格子排序。由于只能从高处往地处滑,所以我就从高处向地处递推。 dp[i][j]dp[i][j]dp[i][j]就表示从格子iii行jjj列 最大第几次能访问到。 样例中数字1所在的位置就为25,即为答案所求。由于是从高向低递推,初始状态就是所有最高的地域: dp[x][y]=0dp[x][...

2018-03-11 21:53:41 228

原创 JoyOI 1091 等差数列(DP)

题意分析等差数列的定义是一个数列S,它满足了(S[i]-S[i-1]) = d (i>1)。显然的一个单独的数字或者两个数字也可以形成一个等差数列。 经过一定的学习小C发现这个问题太简单了,等差数列的和不就是(Sn+S1)*n/2?因为这个问题实在是太简单了,小C不屑于去解决它。这让小C的老师愤怒了,他就找了另外一个问题来问他。 小C的老师给了他一个长度为N的数字序列,每个位置有一个...

2018-03-09 10:54:49 488

原创 OpenJ_Bailian - 2773 采药(DP)

题意分析裸地01背包 因为数组开小了WA了一万年代码总览#include<bits/stdc++.h>using namespace std;const int nmax = 105;int c[nmax],v[nmax];int dp[nmax][1005];int totime,m;int main(){ while(scanf("%d %d",&...

2018-03-08 18:33:30 235

原创 Travel With Haskell 3 — 列表推导式

Travel With Haskell 3 - 列表推导式什么是列表推导式Haskell 列表推导式与Python十分的相似,可以理解为从列表元素中筛选(过滤)出符合条件的值。格式在Haskell中,列表推导式大概长这个样子:[x|description][x|description][x | description ]乍一看以为是数学集合的描述法,其实真的长得差不...

2018-03-07 23:05:43 695

原创 P2066 机器分配 (区间DP)

题意分析总公司拥有高效设备M台,准备分给下属的N个分公司。各分公司若获得这些设备,可以为国家提供一定的盈利。问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值。其中M≤15,N≤10。分配原则:每个公司有权获得任意数目的设备,但总台数不超过设备数M。区间DP状态设计dp[i][j]dp[i][j]dp[i][j] 表示前i家公司分j台机器的最大的收益值。状态...

2018-03-07 22:20:14 619

原创 CodeForces - 546B Soldier and Badges

题意分析给出n个数,每次操作可以将一个数+1,要使这n个数都不同,至少要加多少次。sort下挨个遍历,如果当前数小于等于前一个数,则将该数++。代码总览#include<bits/stdc++.h>using namespace std;const int nmax = 3005;int num[nmax];int main(){ int n,a...

2018-03-07 22:00:26 290

原创 CodeForces - 570B Simple Game

题意分析给出n,m 求一个数a(1<=a<=n)使得当c在1到n的整数中随机取值时,|c-a|<|c-m| 成立的概率最大。想一下绝对值函数的图像,然后在草稿纸上手画一下即可做出来。 提示: 以2m和n的关系来作为分界点来判断代码总览#include<bits/stdc++.h>using namespace std;typedef long...

2018-03-07 21:56:13 251

原创 CF492C Vanya and Exams (贪心)

题意分析有一个人有n门课程,每一门课程他最多获得r学分,他只要所有课程的平均学分大等于avg ,他就可以获得奖学金每门课程,他已经获得了ai学分,剩下的每一个学分,都需要写bi篇论文才能得到,然后问你,这个人最少写多少论文才能获得奖学金按照bi降序排列,从小到大选择即可。 别问我为什么要用longlong,我是不会说的代码总览#include<bits/stdc+...

2018-03-07 21:51:32 452

原创 HDU1372 Knight Moves (BFS)

题意分析在国际象棋棋盘中给出两个点,问马从一个点到另一个点最少需要跳几步。国际象棋中的马和中国象棋的马没有什么区别,只是没有蹩马腿这一说。然后就是裸地BFS了。代码总览#include<bits/stdc++.h>#define ll long longusing namespace std;const int nmax = 10;const int n...

2018-03-07 21:47:07 236

原创 POJ2246 Matrix Chain Multiplication (DFS)

题意分析给出几个矩阵的规模,和几个矩阵的相乘的式子,计算这个矩阵相乘的式子是否合理,如果合理请给出乘法要计算多少次。在处理矩阵表达式的时候有点类似 括号匹配的问题。 如果当前位置是一个左括号,那么我们就继续递归的调用处理表达式的函数,直到读到不是括号(即矩阵),然后就载入当前矩阵的行列信息。并返回该矩阵对象。在读到两个矩阵之后,判断是否满足相乘的条件,即前一个矩阵的列数是否等于第二个矩...

2018-03-07 21:44:20 216

原创 POJ 1017 Packets (贪心)

题意分析一家工厂生产的产品规格分为1×1, 2×2, 3×3, 4×4, 5×5, 6×6,高都是h。工厂要把它们包在6×6×h的包装袋中。工厂想让包装数尽可能少。 一开始把这道题想复杂了,其实只用考虑面积。也就是说物品的高和包装袋的高都是一样的。自然而然能想到有2种装东西的方案,一种是先装小的,再装大的;另外一种就是先装大的,再装小的。明显第一种做法不正确。原因是如果先装完小的,...

2018-03-07 21:35:10 194

原创 51Nod - 1021石子归并(区间DP)

题意分析区间dp状态设计dp[i][j]表示从第i堆石子到第j堆石子的最小花费。状态转移dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+sum[i][j])dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+sum[i][j]) dp[i][j] = max(dp[i][j], dp[i][k] +dp...

2018-03-07 21:25:22 249

原创 POJ 2260 Error Correction (水题)

题意分析判断每行每列1的个数是否为偶数 如果均为偶数,那么OK 如果只有1行1列为奇数,Change所在行列即可·· 除此意外的所有情况均为Corrupt代码总览#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int nmax...

2018-03-04 23:02:16 208

原创 POJ1555 Polynomial Showdown (输出多项式)

题意分析给出一个度为8的多项式,按照书写的格式将其输出出来。 注意如果系数为1的时候,不要输出多余的1,如果第一个系数为负,要输出一个符号。如果多项式的次数为1,不要输出多余的1.思路就是先找到一个系数不为1的,然后将其输出,输出的时候注意正负,而且要特判是否系数为1,特判是否为次数为1,特判是否是常数项。如果找到了一个,那么说明多项式不为0,否则为零。接下来写一个OutPut函...

2018-03-04 21:18:03 641

原创 POJ1504 Adding Reversed Numbers

题意分析将两个反向数进行求和,之后再反向,输出是去掉前导零。代码总览#include<cstdio>#include<cstring>#include<algorithm>#define nmax 200using namespace std;char num1[nmax],num2[nmax],sum[nmax];int len...

2018-03-04 20:53:06 160

原创 C语言课程设计-迷宫问题的求解

需求分析问题描述要求使用链栈非递归的形式求解迷宫问题,并用递归的方式求解全部可能的路径。首先需要写好链栈的相关操作,如初始化,判空,入栈,出栈等等。并且熟练使用栈的相关操作。其次对于迷宫问题,需要使用非递归的方式,就需要将朴素的递归搜索方式,借助链栈转换成非递归的方式。对于求出全部可能路径,可以使用类似图的深度优先搜索的方式,依次求解出路径基本要求输入的形式和...

2018-03-04 09:49:32 16629 15

原创 数据结构实验8-二分查找与二叉排序树

实验要求用随机数产生100个待查找数据元素的关键字值。测试下列各排序函数的机器实际执行时间:(1)顺序查找 (2)二叉排序树查找 (3)折半查找提示: (1)和(2)使用同样的实验数据;(3)要求数据元素必须有序,故需要先使用排序算法进行排序(可以使用冒泡排序)程序代码#include <bits/stdc++.h>#define nma...

2018-03-03 10:59:30 2523

原创 数据结构实验7-有向图的邻接表与Dijkstra

实验要求编写一个程序,实现图的相关运算,并在此基础上设计一个主程序,完成如下功能:设计并实现有向图的邻接表表示实现Dijkstra算法。输出Dijkstra中从目标起点到各顶点的最短路径程序代码#include <iostream>#include <cstdio>#include <algorithm>#include &...

2018-03-03 10:58:06 1800

原创 数据结构实验6-图算法 最小生成树 BFS与DFS

实验要求编写一个程序,实现图的相关运算,并在此基础上设计一个主程序,完成如下功能:建立如教材图7.所示的有向图G的邻接矩阵,并分别输出顶点表和邻接矩阵。在图G的邻接矩阵存储表示基础上,实现深度优先遍历算法,输出从顶点V1开始的深度优先遍历序列。实现广度优先遍历算法,输出从顶点V1开始的广度优先遍历序列。建立如教材图7.16(a)所示的无向带权图G的邻接矩阵,实现普里姆算法,输出从顶...

2018-03-03 10:56:55 3029

algebra_2005_2006.zip

algebra_2005_2006数据集,常作为知识追踪的使用数据。KDD Cup 2010: Educational Data Mining Challenge使用的数据集之一。

2020-04-11

Dynamic Graph Algorithms

Dynamic Graph Algorithms Methodology & State of the Art Algorithmic Techniques & Experimen Conclusions

2018-08-26

空空如也

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

TA关注的人

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