自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 容斥

1 Hdu 2204 问1到n之间有多少个数可以表示成m的k次方 假设k为合数,则可以表示成m的a*b(=k)次方又等于m的a次方的b次方 这样的话只用计算k为素数的话就可以计算出所有的满足的个数 又2^60>10^18&&2*3*5*7>60所以容斥时只用计算最多三个素数 2 Hdu3208 这道题好多坑的 dp[i][j]表示1到j这个范围内有多少个开i次方的 这样的话 dp[1

2013-08-16 15:39:55 564

原创 SBT模板

#include #include using namespace std; #define mm 111111 #define mn 33333 int L[mm],R[mm],S[mm],V[mm]; bool p[mm]={0}; int i,x,y,n,a,tt,root,ans; void RR(int &t)//右旋左节点存在的情况下 { int k=L[t]; L[t

2013-08-11 14:22:45 731 1

原创 hdu 4649 Professor Tian

又是两题的节奏 dp[i][j][2]表示第i个数的时候第j位为0或者1的期望 主要还是细心 对于每个操作进行判断 想到状态压缩这道题就不难了 #include #include #define MAXN 220 int num[MAXN]; char op[MAXN]; double p[MAXN]; int n; int len(int n) { int cnt=0;

2013-08-06 19:17:35 637

原创 poj3667

线段树好难啊 题意是 给1到n个区间m次操作 如果是1的换就是入住k个人 要求连续房间并且房间号最小 能入住输出第一个房间号如果不能入住则输出-1  如果是2就是一个区间内的客人退房 区间合并的问题  lm表示从当前区间左边开始连续房间的个数 rm右边 cm中间 主要就是PU和PD操作  query和update都比较好理解 #include #include #include us

2013-08-05 19:26:05 564

原创 HDU 4616

多校被虐暴了 五个小时一道题没出是什么个节奏 这道题还不算很难 重点在树上任意一点开始的最长路径问题 dp[i][j][k]表示第i个节点之前有j个炸弹的最大价值 k=1是代表最优路径 k=0代表次优 同时保存是由哪个子节点转移过来的 这么在第二次搜索的时候如果最优路径正好是当前子节点转移过来的话就选择次优路径 详情就是见代码了 代码写的这叫一个丑陋啊 太尼玛伤心了 #inclu

2013-07-26 13:14:14 919

原创 hdu 4604

这尼玛是真坑啊 求最长递增子序列的nlogn算法需要维护一个辅助数组 我一直以为需要用二分查找维护 结果实际上只需要调用uper_bound这种函数就可以维护 ~~ 不知道从哪里弄来的题解感觉像是错的 很明显nlogn的算法保存子序列路径是非常困难的而且就算保存以后求ax的出现次数复杂度也不低啊  所以这个题解的做法我暂时还是想不明白 可能是我未知的什么算法吧  真是弱爆了 贴别人

2013-07-24 11:33:57 635

原创 2012 Multi-University Training Contest

HDU 4352 数位dp结合o(nlogn)的最长严格递增子序列 给定一个数的价值为  将该数字看成一个由单个数字排列成的序列,其最长严格递增子序列的长度就是该数的价值 给定一个区间  求该区间内价值为k的有多少个 nlogn的最长严格递增子序列的求法可以自行百度 #include #include #define LL __int64 int dit[50],K; LL dp

2013-07-20 15:41:21 527

原创 codeforce 161 D

#include #include #define max 50010 int n,k; long long dp[max][511],ans; int edge[2*max],head[2*max],next[2*max],cnt,vis[max]; void add(int v,int u) { edge[cnt]=u; next[cnt]=head[v]; hea

2013-04-17 11:00:47 563

原创 poj 2378

被大神说成水题的这道居然写了好久,果然是菜的不行不行了 #include #include int to[20111],head[10111],next[20111],cnt=0,n,ok[10111],flag[10111]; void add(int i,int j){to[cnt]=j;next[cnt]=head[i];head[i]=cnt++;} void dfs(int i,i

2013-04-11 16:47:35 602

原创 poj 3124

给一个三层的书架以及n本书 已知书的高度和宽 求书架的最小面积 状态转移十分奇葩 参考了大神的题解 dp[i][j] 表示当第二个书架的宽为i第三个宽为j的时候的最小高度和,默认第一个书架为最高的书本  首先要对书进行排序,这样使得问题简单化一点 然后对于状态转移方程见代码 #include #include #include using namespace std; #defin

2013-04-06 16:17:39 694

原创 hdu 4539 郑厂长系列故事——排兵布阵

#include #include #define maxn 200 int sta[maxn][2],ok[maxn][maxn]; int dp[111][maxn][maxn]; int m,n,cnt,map[111]; void prt(int i) { int t=i; while(t)printf("%d",t%2),t>>=1; puts(""); }

2013-04-01 16:27:31 711

原创 POJ 3280 最小回文代价

现在有一个由n个字符组成的长度为m的字符串,可以对其通过增加字符或者删除字符来使其变成回文字符串,而增加或者删除字符都有一个花费,求解使该字符串变成回文所进行操作的最小花费. 首先来说删除和添加其实是一个操作 对于字符串来说 无论是添加还是删除都不影响接下来形成回文的操作 那么cost就是添加和删除里面较小的一个 设dp[i][j]为从i 到j 的代价,状态转移就是dp[i]

2013-03-01 15:59:41 748

转载 HDU 4477

这道题是一个挺奇怪的比赛里的 意思是给一根长度为l的线 将其剪成不小于2的n段,求有多少剪法 n段长度互不相等 所以当剪成k段时需要最小长度为k*(k-1)/2; 所以k的最大值为316 dp[k][n]表示长度为n的线剪成k段的剪法 k段均大于一,则将每段的长度减1后,与dp[k][n-k]的方案数相同。 k段中有一段是1,则去掉这段长度为1的,有k-1段,且长度均大于一,与dp

2013-02-04 15:34:20 676

原创 codeforce 18E

#include char map[501][501]; int a[501][30][30]; int r[501][30][30]; int res1[501][30][30]; int res2[501][30][30]; int main() { int n,m; scanf("%d%d", &n,&m); for(int i=0;i<n;i++) scanf("%s",

2013-01-22 10:24:14 520

原创 COdeforce 14E

终于在没有看题解的情况下自己写出了dp题,虽然这题比较水,但还是迈出了第一步。题意大致是在一个平面坐标系,给定一系列x为1,2,3....n的点,y为1到4之间的值,求其中峰的个数为l的有几种,要求相邻两点y不能相等,有l个峰必须有l-1个谷。 鄙人方法比较笨,直接开了四维数组dp[i][j][flag][L],表示第i位为j的时候有L个峰,此时末尾为降序的话flag=1,不然等0。 状态

2013-01-15 10:33:30 642

原创 codeforces13C

给定一个序列,可以对其中元素进行加一或者减一的操作,问最少多少次操作可以将其转换成非降序列 数论还是弱爆了啊 根据官方题解解释,任意一个序列都存在一个最小非降序列完全由先前序列中的元素构成。 既然知道这个结论这题简单了 f[i][j]表示前i-1个元素为非降序列,第i个元素为先前序列中第j个元素做结尾形成的非降路径所需要的最小代价,由于空间限制,不能用二维数组,则对f进行简化 #in

2013-01-12 10:41:32 534

原创 codeforce 11D

给定一个无向图求其环的个数。 数据较大,搜索不行,看了题解大致可以理解为状态压缩dp f[i][j]中i的二进制表示一条通路,1代表该通路上存在该点,0表示不存在,i的二进制最后一个为1的位置为该通路的起点,j为该通路的结尾。f[i][j]表示该通路有多少个。 #include #include #include using namespace std; typ

2013-01-12 10:26:57 442

空空如也

空空如也

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

TA关注的人

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