自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

DreamDraw_Pan的博客

一个来自弱省弱校的蒟蒻的挣扎

  • 博客(19)
  • 收藏
  • 关注

原创 洛谷P3398 仓鼠找sugar

裸的LCA。对于每次询问,设a,b的LCA为A,c,d的LCA为B,分两种情况讨论:1)A与B的深度相同,此时二人相遇的充要条件为A==B,即四个点的最近公共祖先相同。2 ) A与B深度不同,设A的深度大于B的深度,若二人相遇,则c或d与A的LCA一定为A。#include#include#define maxn 100005inline int fread(void){

2016-11-05 19:53:09 514

原创 如何写对二分法

这几天刷题,写了几次二分,无一例外都写炸了,要么多一个,要么少一个,要么就死循环。。。。于是总结一下写二分的经验和教训。。。

2016-11-05 09:44:31 483

原创 Codevs 抄书问题1&2&3

对于抄书问题1,由于标签上写的DP,我就写了DP。。。。设dp[I][j]表示前i本书由j个人抄的最小答案,则状态转移方程为dp[I][j]=min{max(dp[k][j-1],s[I]-s[k])},其中s[]为前缀和,k从j-1到1枚举。输出方案时,由于题目要求多解时使前面的人抄的尽量少,因此可以贪心地输出。由于我们在前面的DP过程后已经知道了每个人抄书的页数的最大值的最小值

2016-11-04 21:56:30 777

原创 Codevs 线段覆盖1&2&3&4&5

对于线段覆盖1、3,贪心,每次选取末端点靠前的,O(n)扫一遍即可(话说这个题似乎排序最占时间)。(当然DP也可以)#include#include#define maxn 1000000+5using namespace std;struct line{ int b,e; friend bool operator < (line x,line y){ if(x.e!=y.e)re

2016-11-04 21:21:51 439

原创 洛谷P1073&NOIP2009 最优贸易

/*然而并不需要写两遍spfa我刚开始的思路是,维护ms[i]和mb[i]两个数组,分别表示从原点到i路径中最大卖出价和最小买入价(就是最大值和最小值),然后跑spfa,用dis[e.from]更新节点e.to时顺便更新ms[]和mb[],然而只A了一组数据然后我仔细想了一下,ms这个数组在一次spfa中是无法更新的,因为水晶球的最大卖出价一定要倒着跑一边spfa更新,然而我懒得写了。

2016-11-04 18:08:40 293

原创 洛谷P1156 垃圾陷阱

果然喜欢把简单的题想复杂呵呵01背包f[I][j]表示使用完第I个垃圾,高度为j时的最大剩余生命值,因为同一高度生命值越多越优转移显然但是此题坑很多。。特别要注意在每个垃圾下落之前,判断所剩生命值减去此垃圾与上一个垃圾的间隔是否大于等于0.#include#include#include#define dp f#define maxn 100+5#define max

2016-10-28 22:20:15 265

原创 洛谷P1108 低价购买

第一问就是最长下降子序列,n^2暴力即可,设dp1[I]表示到i为止的最长下降子序列的长度,关键是第二问设dp2[i]为到i为止的最长下降子序列的方案数,易得dp2[I]=sum(dp2[j]|a[j]>a[I]&&j上面方程的意思是,如果有j但是有重复的方案,需要改进。观察可得一条性质:如果j#include#include#define maxn 5000+10i

2016-10-28 22:14:45 292

原创 洛谷P1052&NOIP2005 过河

(此题srz大神评价为玄学题坐标离散化+特判1)当s!=t时,由于桥很长而石头很少,所以青蛙跳很久才会跳到一个点,由于s!=t,所以青蛙跳j的距离的方案数为(j/(t-s))!种,可以认为青蛙一定有一种方案能跳过这个石头;事实上,当两块石头之间的距离>lcm(s,t)时,青蛙就可以随便跳了,所以可以将每个石头之间的距离取一下模,至于我的程序里为什么模105,谁知道呢。。反正能A。。玄学

2016-10-28 21:49:19 389

原创 洛谷P1026&NOIP2001 统计单词个数

刚看到这个题一直在纠结怎么划分成k份再转移,事实证明我想多了先预处理出数组w[I][j],表示从i到j的单词个数,如果有多个以i开头的单词,只统计一次即可dp[I][j]表示从0到i划分成j份,则dp[I][j]=max(dp[k][j-1]+w[k+1][j]|j-1#include#include#include#define f dp#define maxn

2016-10-28 21:38:11 494

原创 洛谷P1032&NOIP2002 字串变换

IDDFS做这个题感受到了STL的强大233注意同一个字符串可能有多处符合变换规则,所以对于同一个变换规则,搜完一处后要继续搜#include#include#includeusing namespace std;string A,B,A1[7],B1[7];int k,n=1;bool ok=0;bool DFS(int deep){ if(ok)return

2016-10-28 21:31:21 366

原创 洛谷P2346 四子连棋

IDDFS+哈希判重代码怎么这么长#include#includeusing namespace std;int G[4][4],ax,ay,bx,by;int have[4100000]={0},k;bool hash[4100000]={0},ok=0;const int mx[4]={1,-1,0,0};const int my[4]={0,0,1,-1};bool eq

2016-10-28 21:29:16 705

原创 CodevsP1026 逃跑的拉尔夫

广搜+判重,不判重会MLE三维判重,vis[I][j][k]表示在第(I,j)个点处理第k个方向,注意不要错判#include#include#include#include #includeusing namespace std;int r,c,n;char G[52][52];pairstart;const int mx[4]={-1,0,1,0 };con

2016-10-28 21:22:45 211

原创 洛谷P1005&NOIP2007 矩阵取数游戏

(抄的高精度模板233由于要取完所有的数,所以原题可转化为在每一行上取数,累加所有行的答案即可f[k][I][j]表示在第k行从1取到I,从j取到m的答案f[k][I][j]=max(f[k][I-1][j]+2^(m-j+i-1)*a[k][I-1],f[k][i][j+1]+2^(m-j+i-1)*a[k][j+1])(第一次写把a[k][I-1]习惯性地写成了a[I-1][j

2016-10-28 20:45:38 366

转载 除法求逆元(扩展欧几里德和费马小定理)

我们都知道除法不满足取模,那么我们可以求模的逆元来进行求结果,既然乘法可以取模,如果这个数除以一个数,那么我们可以让他乘以一个数使得和除以那个数的结果相同,那么乘的这个数就是那个数的乘法逆元。下面摘自Acdreamer的博客今天我们来探讨逆元在ACM-ICPC竞赛中的应用,逆元是一个很重要的概念,必须学会使用它。 对于正整数和,如果有,那么把这个同余方程中的最小正整数解叫做

2016-10-28 20:43:16 1665

原创 洛谷P1006&NOIP2008 传纸条

初见此题有点蒙蔽,然而可以发现n,m来回两次可以等效成同时传两个纸条,f[a][b][c][d]=max(f[a-1][b][c-1][d],f[a-1][b][c][d-1]),f[a][b-1][c][d-1],f[a][b-1][c-1][d])+g[a][b]+g[c][d];#include#include#includeusing

2016-10-28 20:40:17 317

原创 洛谷P14341 滑雪

好怀念。。第一道自己AC的DP记忆化搜索(好久以前写的有点难看见谅233#include#include#define maxn 1005using namespace std;int m,n,G[maxn][maxn],dp[maxn][maxn];bool vis[maxn][maxn];const int mx[4]={1,-1,0,0};const int my[

2016-10-28 20:37:45 325

原创 洛谷P1101 单词方阵

无脑深搜剪枝:向一个方向搜索时,如果“yizhong”的长度超过了当前点到边界的距离,则continue#include#define maxn 105using namespace std;char G[105][105],ans[105][105];int n,tot=0;void print(int x,int y,int d){ int i,j; if

2016-10-28 20:31:01 437

原创 洛谷P1880 石子合并

好久才明白这个题和堆石子那个贪心的区别,汗。。。设f[i][j]表示从i到j合并的总答案,易得f[i][j]=max/min(f[I][k]+f[k+1][j]+sum[j]-sum[I-1]|I注意这个题是环形#include#include#define maxn 105 using namespace std;int a[maxn],n,s[(ma

2016-10-28 20:20:56 389 1

原创 洛谷P1057&CodevsP1148 传球游戏

(由于不怎么会写环形DP,特水此题记忆化搜索f[i][j]=f(i-1,j-1)+f(i+1,j-1)当i当i>=n时,i%=n;写记忆化搜索很坑爹的一个问题,如果直接把dp数组当作vis来用的话会死循环,因为可能没有方案,因此dp数组全都是0#-_-#include#include#define f dp#define maxn 30+5i

2016-10-28 20:02:53 264

空空如也

空空如也

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

TA关注的人

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