oj
wrnge
这个作者很懒,什么都没留下…
展开
-
leetcode 打家劫舍1与2
第一道DP题。主要是要判断当n=0,1,2的特殊情况。打家劫舍2则是“断”掉圈,分别考虑不选第一个和不选最后一个的情况。//打家劫舍1class Solution {public: int rob(vector<int>& num) { int n=num.size(); int opt[n+5]={0}; if...原创 2018-11-24 00:33:25 · 244 阅读 · 0 评论 -
Leetcode 315 计算右侧小于当前元素的个数
期末终于结束了额。第一次写分治。这个题是用结构体储存分治过程中,此元素右边较小元素的个数。第一次WA:分支过程中,在元素p右边比元素p更小的元素个数为q-m。但是在过程中有很多这样的元素,所以应该+=,而不应该=。第二次WA:判断q的位置的时候,是a[p]<=a[q]就将q-m加到p.v上。因为这个题是要求小于,所以大于等于就是它的互斥条件。除此之外,分治还有很多细节需要熟悉。c...原创 2019-01-18 11:44:09 · 333 阅读 · 0 评论 -
HDOJ-2602 Bone Collector (01背包问题)
主要是要找到状态转移方程。第一种办法,开dp[N][V],表示前N个物品,占体积V的最优价值。在这种方法的情况下,dp[i][j]由两个状态的最优值转移过来,分别是拿了没拿第i个(dp[i-1][j]),和拿了第i个(dp[i-1][j-ti[i]]+jia[i])这两种状态。代码为#include<iostream>#include<cstdio>#inclu...原创 2019-02-06 21:05:31 · 145 阅读 · 0 评论 -
1141D - Colored Boots
先同色匹配,再?匹配剩下的,再?匹配?我的错误1.我的理解是先?匹配其他色,再?匹配?,再同色匹配同色。。。。不知道哪里出错2.对queue.empty()理解出错。。。。当空返回1。好久 没有打代码了,犯下低级错误。#include<bits/stdc++.h>using namespace std;queue<int> leftshoe[27];queue...原创 2019-03-21 13:05:27 · 101 阅读 · 0 评论 -
1141C - Polycarp Restores Permutation
这个题好坑。。。如果给你一个很大的数(42样例中为10738),再加上199992个数,就会让mx达到21亿,让int溢出,RE的结果。所以在循环的过程中,就要判断最大值是否比最小值大N,如果已经大N了,则没有解,直接退出。本题不成立的两个条件1.最大值比最小值大N及N以上2.有两个重复数字#include<bits/stdc++.h>using namespace std;...原创 2019-03-21 12:58:03 · 313 阅读 · 0 评论 -
1141E - Superhero Battle
总体思路明确,但是犯了2个非常低级的错误。。。1.判断错误条件一开始写的(mn>=0||d[n-1]>=0) 实际条件是mn>=0||(d[n-1]>=0&&H+mn>02.d[i]不是原来的伤害,而是从iter*n+0时刻开始到这个时候的一个总伤害值,在最后一次循环的伤害计算时犯错#include<bits/stdc++.h>u...原创 2019-03-21 16:14:31 · 290 阅读 · 0 评论 -
P1064 金明的预算方案
将附件用一个数组储存到主件后面,然后对主件进行判断1.该主件没有附件则有2个状态:不选该主件,选该主件2.该主件有一个附件,则有3个状态:不选,选主件,选主件+附件3.该主件有两个主件,则有5个状态:不选,选主件,选主件+附件1,选主件+附件2,选主件+附件1+附件2.注意:1.储存的时候从i=1开始,不然容易出错2.对于每个状态,应该分别判断此时背包能不能装下。#include&l...原创 2019-03-26 19:21:32 · 87 阅读 · 0 评论 -
P3372 【模板】线段树 1
线段树学习这个题来看,线段树分为建树,更新,查询。1.建树void build(ll p,ll l,ll r){ tag[p]=0; if(l==r){ dat[p]=a[l]; return; } ll mid=(l+r)>>1; build(lson(p),l,mid); build(rson(p...原创 2019-03-27 13:14:26 · 81 阅读 · 0 评论 -
P1373 小a和uim之大逃离
关键是状态的选择。我一开始使用了dp[i][j][k]表示路径终点为(i,j)格差为k时的种数但是后来发现这样的状态转移方程emmmm转移过程中会出错,而且会TLE。所以还是按洛谷上的题解#include<bits/stdc++.h>using namespace std;int a[805][805];int dp[805][805][17][2]={0};const ...原创 2019-04-10 23:40:24 · 136 阅读 · 0 评论 -
P1280 尼克的任务
这个题虽然知道是dp,但是刚刚开始,思路尚不明确。1.首先,这个题应该是从后往前推。因为如果你选择了一项任务,你现在的状态是从未来的时刻转移回来的。换句话说,你不能在这个时刻选择这个时刻已经结束的工作。因此,应该从后往前推。2.如果从后往前推,那么就需要已知初始时刻在dp[n]的值。所以,让dp[i]代表从i~n中间的空余时间。dp[n]=03.其余的,例如线段覆盖的排序问题用结构体写并排序...原创 2019-04-01 22:25:52 · 88 阅读 · 0 评论 -
P1006 传纸条
三维dp主要是要找到描述状态的数组。这里可以将传纸条来回的过程看作同时从左上传两张纸条给右下,且路径不重复。由于路径长度相等,所以说每一个时刻两个纸条的i+j是恒等的。所以就可以用dp[sum][j][k]来描述每一个时刻两个纸条所在的位置。而这一时刻的两个纸条的状态由上一时刻的1~4个状态转移而来。所以就有了状态转移方程 if(i-j>1){ ...原创 2019-04-07 12:50:51 · 278 阅读 · 0 评论 -
P1417 烹调方案
乍一看是01背包问题,实际上不是01背包问题的写法,是整个物品数组从前往后更新。当你更新第i个物品的时候,此时的状态空间是前i-1个物品的最优解。也就是说已经隐含了先更新,先选择由于01背包问题的物品价值与其先后顺序没有关联,所以不用排序。但在这个题里面,如果物品的先后选择直接影响了结果。借用洛谷上的题解现在考虑相邻的两个物品x,y。假设现在已经耗费p的时间,那么分别列出先做x,y的代价:...原创 2019-04-07 19:35:14 · 115 阅读 · 0 评论 -
P1736 创意吃鱼法
思路很明确,但是也有两个坑1.对角线包括左对角线和右对角线2.每个状态由三个值来取最小值,如图。一开始没有考虑绿色,导致类似这样的数据4 41 0 0 10 1 0 00 0 1 01 0 0 1最后dp[4][4]的值为1,而正确答案是为3。也就是说,它可以继承上一个状态的一部分#include<bits/stdc++.h>using namespace s...原创 2019-04-08 09:30:50 · 116 阅读 · 0 评论 -
P3374 【模板】树状数组 1
树状数组也是一种分块数组,终极理解在这张图上(网上偷的)可以看到,每2^i个a[i]就有一个管理这一块矩阵值的c[i]。而且有x+lowbit(x)为x对应父节点的下标x-lowbit(x)为x所管辖块的前一块的父节点的下标tree[i]储存值,而且取了前缀和summ(x)后,还可以很轻松地完成区间和的查询但是树状数组的限制就在:只能求前缀问题和差分问题。所以更广的应用还是在线段树上...原创 2019-03-28 22:01:14 · 125 阅读 · 0 评论 -
P3368 【模板】树状数组 2
树状数组可以有两类操作1.区间查询和点修改2.区间修改和点查询这两种操作的本质差别就是,tree数组的意义不同。在1中,tree数组是储存的区间和,2中,tree数组储存的是一个差分数组。这道题是用的2如果tree数组是一个差分数组,那么Σtree i = a[i],且区间修改只需要update(x,k)和update(y+1,-k)。注意,tree[1]=a[1],作为初项,才能满足上...原创 2019-03-28 23:43:20 · 97 阅读 · 0 评论 -
P1140 相似基因
1.因为第一/二段的1与第二/一段的0匹配时可视作与空碱基匹配,所以先进行一波预处理2.状态转移方程3.转化为数字和COST矩阵简化代码。#include<bits/stdc++.h>using namespace std;int dui[6][6]={ {0,0,0,0,0,0}, {0,5,-1,-2,-1,-3}, {0,...原创 2019-04-02 21:49:39 · 104 阅读 · 0 评论 -
POJ-1321 dfs+剪枝
这个题DFS,一开始想用巧办法,用一个数组储存棋盘格子,然后用一个两个vector来储存被删除的行数和列数。但是这个思路后面碰到了一些麻烦,而且花时间还更多。第一个错误就是判重。放棋子过后,只能在这个棋子之后的空位上下棋子。如果不判重,结果会翻倍。下面是耗时多的代码#include&lt;cstdio&gt;#include&lt;stack&gt;#include&lt;vector&...原创 2018-12-25 23:52:45 · 111 阅读 · 0 评论 -
HDU-2612 Find a way
毒瘤数据。。。1.KFC可以经过2.可能有不能到达的KFC解决1的方法,就是另外立一个ans数组,然后KFC的初值为-1,其他为0。只有当ans[i][j]>0,且view1[i][j]&&view2[i][j]的时候,才是真正两个人都到达的KFC。这个时候,遍历一遍,输出最小值即可。解决2的方法,就是储存答案到ans数组后,继续遍历就完事了。。。#include&...原创 2018-12-28 17:10:07 · 237 阅读 · 0 评论 -
N皇后问题 HDU - 2553
深搜+打表。1.全局变量打表2.出口判断3.用check[i]=j代表第i行放置的是第j个棋子#include<cstdio>using namespace std;int check[11]={0},s[11]={0};//下标是行数,值是第几个棋子,s储存答案int ct=0,n=1;//n全局变量,用来打表int dfs(int cur){ if(cur...原创 2018-11-26 09:49:16 · 95 阅读 · 0 评论 -
刘汝佳第六章UVA-297
这道题死活WA…不知道为什么,uDebug上的数据也全部过了。。。就先在这里挖个坑以后再来填1.这里的p必须传引用来求解,这样才能够体现“递归”的特性:当出现p的时候,依次处理后面四坨子树,而子树的节点数不一定为1,所以要一个一个来。#include<cstdio>#include<cstring>using namespace std;const int le...原创 2018-12-04 13:03:16 · 122 阅读 · 0 评论 -
POJ-2488
第一道DFS,对DFS有了一个大概的了解1.用一个数组定义方向,这样的话可以依照字符串顺序来进行搜索。2.dfs这个函数是模拟的放下棋子后的判断,而在dfs前后进行放祺和回溯(撤棋)3.dfs走到最后,要么flag=1成功,要么失败,所以直接默认失败就好了。4.在dfs开头先判断是否已经成功,再判断是否成功(我觉得反过来也可以),在进行操作。5.ans数组来储存答案,如果失败不用再“清零...原创 2018-11-28 16:11:21 · 471 阅读 · 0 评论 -
Leetcode 打家劫舍 III
第一道树状DP。第一种方法,也是最容易想到的基本的dp。一个节点的最大钱数,就是opt(left)+opt(right)和val+ll+lr+rl+rr的最大值。这样做的话,会增加很多搜索的时间,时间1000ms左右/** * Definition for a binary tree node. * struct TreeNode { * int val; * Tree...原创 2018-12-05 20:29:39 · 99 阅读 · 0 评论 -
刘汝佳第六章UVA-1572
转化为一个有向图,判断有向图是否有闭合环。如果有,则可以无限重复。如果没有,则不行。转化的具体方式为,遍历输入条件的每一个边,然后把这个边的对应节点(比如A+对应A-)与这个条件的其他边相连(模拟现实情况中的两个正方形相连)。网上代码的输入非常漂亮,用了两个函数,一个ID函数,将52个条件对应为了52个数字。异或可以用来转换相邻的偶数和奇数。一道普通的DFS题!vis[i]为剪枝,意思是只...原创 2018-12-12 19:38:32 · 105 阅读 · 0 评论 -
刘汝佳第六章UVA-10129
本来是一个非常简单的问题。就是先看是否联通,然后再根据节点数量来进一步判断。。。因为失了智所以又很多BUG,慢慢调1.用op和ed来储存起点和终点。最多各有一个。2.用一个exist数组来储存出现过的字符。3.基础的dfs来遍历这个图。注意,因为这个是一个有向图,起点有两个要求。①入度比出度小1.②如果没有这种节点,那么就选择一个入度等于出度的节点。4.再用书上的节点度的判断。5.还有很...原创 2018-12-07 00:50:05 · 92 阅读 · 0 评论 -
Codeforces Round #527-D1. Great Vova Wall (Version 1)
这个题一开始是模拟法。从头到尾遍历,根据左右两边的高度来选择1.如果这个位置左右两边的块都比自身高1块,则不行2.如果这个位置是最后一个位置,则这个位置的高度可以加到比左边高1或者和左边一样3.如果不是最后一个位置,则这个位置可以左边的一起加到和右边一样高,或者自己单独比右边高1或者一样高这样做铁超市,test6和test8都是TLE。当时很无助后来看网上的更加优化的解法,是栈模拟。如果...原创 2018-12-20 13:05:25 · 198 阅读 · 0 评论 -
HDU-1241 Oil Deposits BFS+剪枝
以前做过的求联通块问题。这里主要有两点1.渐渐出来一个板子,即①判出②循环方向①剪枝(越界,或者已经遍历过)②判断是否可走进行下一步dfs或者bfs2.运行时间31ms,和网上的15ms有区别。我觉得主要是init函数花费较多时间。但是这样的模块化让代码可读性更高了。#include<cstdio>#include<cstring>#include<...翻译 2018-12-27 11:29:18 · 296 阅读 · 0 评论 -
POJ-2251 Dungeon Master BFS
三维的BFS。有两处错了:1.没有清空队列2.没有判断数组越界3.变量名字相同导致WA了和RE了几次。#include<cstdlib>#include<cstdio>#include<cstring>#include<iostream>#include<queue>using namespace std;bool...原创 2018-12-27 19:23:33 · 105 阅读 · 0 评论 -
POJ-3278 Catch That Cow (BFS&DP)
这个题归类在搜索里面,实际上用动归也可以做。1.BFS就正常的p-1,p+1,2p的BFS。再复习一遍模板1.标记此处,已经遍历过2.判断是否退出3.进行下一步遍历1.判断越界。越界的条件必须要用数字判,否则RE2.判断是否遍历过。3.pushBFS代码如下#include<cstdlib>#include<cstring>#include<q...原创 2018-12-27 20:11:07 · 187 阅读 · 0 评论 -
POJ-1426 Find The Multiple
不要被吓到。。。就是一个暴力枚举。#include<cstdio>#include<queue>using namespace std;long long int bfs(int n){ queue <long long int>q; q.push(1); while(1){ long long int u=q....原创 2018-12-27 21:17:04 · 67 阅读 · 0 评论 -
POJ-3126 Prime Path BFS+打表
这个题打表很重要,可以节约不少的时间。可以在判断越界后,在对每个子状态push之前将这个子状态的view[]赋值,这样也可以节约不少时间再复习一边bfs 板子1.判断是否结束2.进行下一步遍历1.判断子状态是否符合要求(越界,已经view过)2.将子状态的view赋13.子状态push#include<cstdio>#include<cstring>#i...原创 2018-12-27 22:09:03 · 129 阅读 · 0 评论 -
POJ-3087 Shuffle'm Up 模拟
模拟就好了。。。只不过洗牌的阶段模拟容易出错,而且我用数组来模拟,代码不好看。归根结底还是对map和str函数操作不熟悉。#include<cstdio>#include<cstring>#include<iostream>using namespace std;int main(void){ int n; scanf("%d",&am...原创 2018-12-28 11:06:16 · 120 阅读 · 0 评论 -
UVA-11624 BFS 仍然RE
留坑1.上面赋值,下面判断条件2.判断条件,先越界,再剪枝3.预处理就加入栈#include<cstdio>#include<cstring>#include<iostream>#include<queue>using namespace std;//const int mx=2000+5;#define mx 1100int ...原创 2018-12-28 14:02:21 · 111 阅读 · 0 评论 -
POJ-3984 迷宫问题 DFS
简单的DFS问题,用一个vector来储存答案。注意,要搞清楚每一个“dfs”函数的作用。这里的dfs函数,就是在已经将这一处的位置置于答案里,且将view遍历后的状态下,搜索四周的几处状态。如果子状态真,那么这个状态为真。如果子状态都是假的,那么这个状态也是假的。总结 dfs板子1.首先,用递归实现dfs,一般都会接受值并返回值。2.明确接受一些值表征一个状态。值得注意的是,这个状态至少...原创 2018-12-28 14:53:40 · 224 阅读 · 0 评论 -
P2279 [HNOI2003]消防局的设立
本来看着像是树状DP,但是状态好麻烦。所以可以用贪心。如果一个节点没有消防局覆盖,那么在祖父节点处建立消防局最优这个思想一开始想到了,奈何代码能力不够。所以借鉴了一下洛谷上的思路。1.用d[i]储存深度,b[i]来代表节点值。然后这个cmp函数来排列b[i],即实现了b[i]代表第i深的节点值2.用o[i]来储存到这个节点最近的消防局距离。f[i]代表父节点(由于输入a[i]小于i,所以1...原创 2019-04-12 23:48:39 · 196 阅读 · 0 评论