
洛谷OJ
文章平均质量分 71
h4ms7er
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
洛谷OJ: P1616 疯狂的采药(完全背包问题)
分析: 和01背包的不同之处就在于第二个循环,01背包是从后向前推,无法从后面的状态中获得收益,但是完全背包可以选很多个,就可以从前向后推,进而从之前的状态中获取收益,状态转移方程dp[i] = max{dp[i], dp[i-w[i]] + v[i]},这一题的w是时间t#include <cstdio>#include <iostream>using namespa...原创 2018-04-14 12:44:16 · 462 阅读 · 0 评论 -
洛谷 P1120 小木棍 [数据加强版]
开始被一个不知到是什么鬼的小地方弄得TLE了,也是很难受之前是这么写的#include <algorithm>#include <iostream>#include <vector>#include <cstdio>using namespace std;const int maxn = 65+10, inf = 0x3f3f3f3f;...原创 2018-04-04 22:31:32 · 171 阅读 · 0 评论 -
洛谷OJ: P1417 烹调方案
思路: 分析后就是一道01背包题,但如果按普通的01背包题直接进行DP的话只能拿到35分,我们来分析一下为什么。举个例子,如果先使用了第一个物品,那么第二个物品的价值就会随之减小,但如果正确答案是先选第二个物品的后选第一个物品的话,那么得到的结果肯定就是错的,那么我们该如何选取物品呢?先将例子种式子列出来ans1 = a1-b1*(p+c1)+a2-b2*(p+c1+c2)ans2 = a2-b2...原创 2018-04-17 23:54:14 · 302 阅读 · 0 评论 -
洛谷OJ: P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm(强连通分量)
思路:求强连通分量的模版题, 答案就是结点个数大于1的强连通分量的个数#include <iostream>#include <vector>#include <cstdio>#include <stack>#define sz size()#define Min(a,b) a<b?a:busing namespace std;...原创 2018-04-22 15:31:15 · 419 阅读 · 0 评论 -
洛谷OJ:P1135 奇怪的电梯
这题有三种解法,1.搜索 2.最短路 3.DP1.直接写个DFS就行了#include <iostream>#include <cstdio>using namespace std;const int maxn = 200+10, inf = 0x3f3f3f3f;int k[maxn], ans = inf;bool vis[maxn];int n, a, ...原创 2018-04-18 16:33:10 · 374 阅读 · 0 评论 -
洛谷OJ: P1514 引水入城
思路:首先用BFS搜索(其实用记忆化的DFS更好)能够到达的城市,判断一下是否所有城市都能够被覆盖即可完成第一问,那么关键在于第二问怎么完成,通过思考可以得出"如果每座城市都可以到达,那么一个蓄水场可到达的城市是连续的"这样一个结论,那么就变成了一个区间覆盖问题,至此已经可以完成这一题了/** * 洛谷oj: P1514 引水入城 * 类型:搜索,贪心 */#include<al...原创 2018-04-13 19:32:07 · 323 阅读 · 0 评论 -
洛谷OJ: P1164 小A点菜(01背包问题)
我最薄弱的方面就是DP了,之前一直很害怕DP,从今天开始就攻一攻DP吧,先把以前做的复习一遍分析: 1.如果当前的余额i恰好能够点这道菜,那么金额为i时的点菜方式增加1 2.如果当前的余额i点完这道菜还有剩余,那么金额为i时的点菜方式增加不点这道菜时的方式所以得到递推式dp[j] = 1.dp[j]+1 (j=temp) 2.dp[j] + dp[j-temp] (j > t...原创 2018-04-14 01:49:01 · 354 阅读 · 0 评论 -
洛谷OJ: P1330 封锁阳光大学
今天C语言课写完实验报告就开始做题,然后只想了思路,没有写代码,下午物理实验课回来把代码写上再修改了一下就AC了。思路: 用dfs将图染色,只需染两种颜色,如果遇到已经染色过的点,判断该点的色彩与领边点的色彩是否一样,如果一样的话那么就输出"Impossible",染色的同时统计每种颜色的数量,较小的那个数量即为答案,但是第一次交的时候我没有想到可以分成被多个图,于是统计的是全图的颜色,正确的做法...原创 2018-04-19 18:55:06 · 301 阅读 · 0 评论 -
洛谷OJ: P2661 信息传递
思路:看完题目思考了一会后就想到判环即可,统计记录环的长度。#include <iostream>#include <cstdio>using namespace std;const int maxn = 200000+10;int par[maxn], dis[maxn];int n, temp, ans = 0x3f3f3f3f;void init(in...原创 2018-04-19 19:06:37 · 308 阅读 · 0 评论 -
洛谷OJ:P1726 上白泽慧音(强连通分量水题)
分析:给定一个有向图,求出最大的强连通分量#include <iostream>#include <cstdio>#include <vector>#define Min(a,b) a<b?a:b#define Max(a,b) a>b?a:busing namespace std;const int maxn = 1e5+10;/*...原创 2018-05-01 12:55:26 · 282 阅读 · 0 评论 -
洛谷OJ:P2055 [ZJOI2009]假期的宿舍(最大流)
分析:一道求二分图最大匹配的题,就是建模比较绕其他没什么,首先我们要清楚人和床是需要分开的,所有需要2*n个结点,我们把前1~n结点当成人,n+1~2*n结点当成床,那么问题就简单了,我们只需要将床与汇点连接,需要床的人与源点连接,再将人与自己的床以及认识的人的床连接即可,最后求出的最大流如果与需要床的人数相同的话就可以使每个人都有床睡#include <iostream>#incl...原创 2018-05-01 14:11:55 · 300 阅读 · 0 评论 -
洛谷OJ:P1345 [USACO5.4]奶牛的电信Telecowmunication(最小割)
分析:求最少需要去掉几个点让源点无法到达汇点,于是就成了一个最小割点问题,我们将一个点拆分成两个点,设这个点为i,那么将i拆分成i和i+n这两个点,连一条i到i+n的有向边,边权为1,将i的入边与i连接,i的出边变为i+n的出边,权值均为无穷大,之后直接求最大流即为最小割点的答案了#include <iostream>#include <cstring>#include...原创 2018-05-01 15:11:56 · 306 阅读 · 0 评论 -
洛谷OJ:P2341 [HAOI2006]受欢迎的牛(强连通分量-缩点)
分析:如果一群奶牛在一个强连通分量中,那么它们都是相互喜欢的,所以先用tarjan缩点,那么要怎么才能找到被所有奶牛喜欢的奶牛群呢?这里我们用到一个结论在有向无环图中,如果有且仅有一个点的出度为0 (没有指向其他点的边),那么该点可以被所有点遍历到;反之,该图中没有可以被所有点遍历到的点并且,在有向图无环中,如果一个点可以被所有点遍历到,那么这个点的出度为0所以我们只要在缩点后找出唯一的出度为0的...原创 2018-05-01 16:00:26 · 370 阅读 · 0 评论 -
洛谷OJ:P3119 [USACO15JAN]草鉴定Grass Cownoisseur(强连通分量+DAG求最长路)
思路:先缩点处理,之后就比较难了,因为要选一条边逆向走,总不能用枚举的方法来做把,考虑到缩点后的图必然是一个DAG(有向无环图),于是我们只需要考虑两类点:第一类点:能够从草场1所在的点到达的点第二类点:能够从所在点到达草场1的点那么我们只要求出从草场1所在点走到每个第一类点的最大收益Ai和从从二类点所在点走到一类点的最大收益Bi即可求出答案前者是很容易求的,但是后者怎么求呢?很简单,只需要将图反...原创 2018-05-01 17:54:57 · 410 阅读 · 0 评论 -
洛谷OJ: P1242 新汉诺塔
题目描述设有n个大小不等的中空圆盘,按从小到大的顺序从1到n编号。将这n个圆盘任意的迭套在三根立柱上,立柱的编号分别为A、B、C,这个状态称为初始状态。现在要求找到一种步数最少的移动方案,使得从初始状态转变为目标状态。移动时有如下要求:·一次只能移一个盘;·不允许把大盘移到小盘上面。输入输出格式输入格式:文件第一行是状态中圆盘总数;第二到第四行分别是初始状态中A、B、C柱上圆盘的个数和从上到下每个...原创 2018-04-11 20:52:18 · 357 阅读 · 0 评论 -
洛谷OJ: P1373 小a和uim之大逃离
思路:首先给小uim改个名,叫他小b好了,那么我们定义dp[i][j][k][0/1]为,在i,j点,小a小b的魔瓶差值为k,0代表小a吸收了这一格的魔液,1则是小b吸收了这一格的魔液,有几种方法到达这种状态。这个k坑了我好久。。由于小a与小b两者魔瓶的差值可以为k,可是当k模k的时候得数却是0,所以我们得让k加1,开始数组开小了也WA了好几次。通过定义的dp数组我们可以得到递推式1.dp[i][...原创 2018-04-16 23:52:47 · 234 阅读 · 0 评论 -
洛谷OJ: P1064 金明的预算方案(01背包问题)
思路: 这是一道01背包问题, 只有选与不选的这两种情况, 但是这题物品的属性比起普通的01背包只有重量和价值以外多了主件/附件这一属性, 再看题目中"每个主件可以有0个、1个或2个附件"这一句话,一种物品的所有选择情况只有:1.只选择主件 2.选择主件+附件1 3.只选择主件和附件2 4.选择主件和所有附件, 那么我们很容易就能得到状态转移方程dp[i]= max{dp[i], dp[i-...原创 2018-04-14 16:20:47 · 358 阅读 · 0 评论 -
洛谷OJ: P1020 导弹拦截(LIS)
思路:Problem1: 第一个问题就是求最长不上升子序列长度Problem2: 第二个问题看上去有些难, 但是通过组合数学中的"Dilworth定理"可以知道"最少的下降序列个数就等于整个序列最长上升子序列的长度", 所以第二个问题就是求最长上升子序列长度/** * 题目: 洛谷OJ P1020 导弹拦截 * 题型: DP **/#include <cstdio>#inc...原创 2018-04-14 17:27:41 · 449 阅读 · 0 评论 -
洛谷OJ: P1091 合唱队形(LIS)
思路:求出以每个人结尾的最长上升子序列以及以每个人开头的最长下降子序列即可/** * 题目: 洛谷OJ P1091 合唱队形 * 题型: DP **/#include <cstdio>#include <iostream>using namespace std;const int maxn = 100+10;int dp1[maxn], dp2[maxn]...原创 2018-04-14 19:14:54 · 333 阅读 · 0 评论 -
洛谷OJ:P1880 [NOI1995]石子合并(DP)
思路:首先来分析一下题目,“在一个圆形圆形操场”告诉我们石头是按环状摆放的,也就是说头尾也可以合并,这个容易解决,我们将数组扩大一倍即可。之后思考动态转移方程怎么写,合并一组石子首先要将这一组石子中的每一堆石子两两合并,那么我们很容易就可以得到动态转移方程Problem1:dp[i][j] = min{k|dp[i][j], dp[i][k]+dp[k+1][j]+w(i, j)}Problem2...原创 2018-04-15 01:10:06 · 371 阅读 · 0 评论 -
洛谷OJ: P1140 相似基因(DP)
思路:仍然是一道简单的DP,首先我们来分析一下有几种策略可以选择1.令第一条链的碱基与空碱基配对2.令第二条链的碱基与空碱基配对3.令两条链的碱基相互配对那么我们很容易就能够得到状态转移方程了,dp[i][j]表示第一条链的1~i部分与第二条链的1~j部分的最大匹配值dp[i][j] = max{dp[i][j], dp[i-1][j]+a[i]与空碱基的匹配值, dp[i][j-1]+b[j]与...原创 2018-04-15 01:55:55 · 626 阅读 · 0 评论 -
洛谷OJ:P1855 榨取kkksc03(DP)
思路:还是一道01背包,不过有了两个属性而已/** * 题目: 洛谷OJ:P1855 榨取kkksc03 * 题型: DP **/#include <cstdio>#include <cstring>#include <iostream>using namespace std;const int maxn = 200+10;int dp[ma...原创 2018-04-15 02:15:28 · 298 阅读 · 0 评论 -
洛谷OJ: P1508 Likecloud-吃、吃、吃
思路:一题非常直观的DP,直接就可以列出动态转移方程dp[i][j] = dp[i][j] + max{dp[i-1][j-1], dp[i-1][j], dp[i-1][j+1]};即向左前方走,向前走,向右前方走说来和校OJ那题走运的zzz简直一模一样呢,不过这题有个坑点就是"每组数据的出发点都是最后一行的中间位置的下方!",所以最后的答案应该是最下面一行最中间的三格中最大的那个值/** *...原创 2018-04-15 02:47:37 · 390 阅读 · 0 评论 -
洛谷OJ: P1387 最大正方形(DP)
思路,只有当↖←↑这三个方向都是1时才能组成正方体,所以就能直接得到状态转移方程啦dp[i][j] = min{dp[i-1][j-1], dp[i][j-1], dp[i-1][j]} + 1 (dp[i][j] != 0)/** * 题目: 洛谷OJ P1387 最大正方形 * 题型: DP **/#include <cstdio>#include <iostrea...原创 2018-04-15 03:10:07 · 516 阅读 · 0 评论 -
洛谷OJ: P1006 传纸条
思路:开始看到这题的时候无从下手,于是就在纸上试着画出路线,看看有没有什么规律,画着画着发现在画完路线的图上每一条从右上到左下的斜线都只用到了两个同学,并且在斜线上一条线路永远在另一条线路的右上方,因为做n皇后问题的时候有利用过这种斜线,于是就想以这个作为突破口写出状态转移方程,思考了有一个小时吧...最后才得到了状态转移方程首先我们定义dp[k][i][j]的意义为横纵坐标为k的斜线上, 在下面...原创 2018-04-15 04:50:04 · 460 阅读 · 0 评论 -
洛谷OJ: P1005 矩阵取数游戏
今天因为高数模拟考没怎么做题,就睡前做了这么一题,舍友也开始一起在洛谷刷题了,很开心,但是高数只考了63,很不开心,心情复杂。思路:每一行都是独立的选择,不要因为有多行而被带到错误的思考方向,所以我们开始分析独立的一行数据,那么只有两种选择,1.选择最开头的数字 2.选择最末尾的数字, 而每次增加的分数都是2^i*选择的数字,那么我们稍加思考就可以得到状态转移方程啦。首先,我们定义dp[i][j]...原创 2018-04-16 01:46:34 · 420 阅读 · 1 评论 -
洛谷OJ: P1220 关路灯(DP)
刚看完题目的时候感觉这很容易嘛,不就向左向右两种转移方式,于是直接就写出了动态转移方程,dp[i][j]表示关闭i~j区间内所有灯的最小消耗,dp[i][j] = min{dp[i-1][j]+dis(i,i-1)*w(i-1,j), dp[i][j+1]+dis(j+1,j)*w(i-1,j)}。后来写出来代码发现不对,思考了一会以后发现没有考虑此时人的位置在哪里,需要多加一种状态。之后得到了如...原创 2018-04-16 03:08:14 · 351 阅读 · 0 评论 -
洛谷OJ: P1156 垃圾陷阱(DP)
昨天五点才睡导致今天状态太差了,所以三个小时才勉强做出来这题,哎,还是得早睡早起呀思路:首先来分析一下一个时刻有几种状态,1.时间 2.生命值 3.垃圾高度 4.剩余垃圾数,难道要开一个三维数组来记录吗?当然是不可能的,通过思考,我们发现时间和剩余垃圾数是有关联的,因为题目告诉我们垃圾是按顺序丢的,所以可以通过记录剩余垃圾数来得到时间,那么我们只需要记录三个状态,也就只需要开一个二维数组,首先我们...原创 2018-04-16 23:20:39 · 329 阅读 · 0 评论 -
洛谷OJ: P2347 砝码称重
思路:一道多重背包题,之前学习背包问题的时候了解到多重背包可以转换成01背包来做,但是可以通过二进制的思想来优化它,比如13可以拆分成2^0,2^1,2^2,6,这四个数组合可以得到1~13之间的任意整数,那么就把13个物品成功转化为了4个物品,那么这题也是一样的,将a1的个数拆分为2^0,2^1,...,之后当作一道01背包来做#include <iostream>#include...原创 2018-04-16 23:30:21 · 659 阅读 · 0 评论 -
洛谷OJ:P1991 无线通讯网
分析:根据"任意两个配备了一条卫星电话线路的哨所(两边都ᤕ有卫星电话)均可以通话,无论他们相距多远"和可安装的卫星电话的哨所数为s可知只需要将这些哨所连城s个联通块即可,所以只需要贪心将当前剩余最短的边加入生成树并记录生成树中最长的边至剩余s个联通块即可得出答案。#include <algorithm>#include <iostream>#include <ve...原创 2018-04-24 21:27:09 · 267 阅读 · 0 评论