自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

SiriusRen的博客

是不是代码很短<( ̄︶ ̄)>

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

原创 BZOJ 2427 /HAOI 2010 软件安装 tarjan缩点+树形DP

终于是道中文题了。。。。 当时考试的时候就考的这道题。。。。 果断GG。 思路: 因为有可能存在依赖环,所以呢 先要tarjan一遍 来缩点。 随后就进行一遍树形DP就好了。。 x表示当前的节点。j表示j的空间最多能放多少价值的软件。 状态转移方程:f[x][j]=max(f[x][j],f[x.son][k]+f[x][j-k]) 题目说:软件i只有在安装了软件j(包括软件j的直接

2016-07-31 17:11:27 506

原创 POJ 1155 树形DP

题意:电视台发送信号给很多用户,每个用户有愿意出的钱,电视台经过的路线都有一定费用,求电视台不损失的情况下最多给多少用户发送信号。 转自:http://www.cnblogs.com/andre0506/archive/2012/10/09/2717441.html思路: 基础树形DP。 x表示当前在的节点。j表示选j个收听电视。 f[x][j]=max(f[x][j],f[x.son][k

2016-07-31 15:49:30 333

原创 POJ 3252 组合数学?

大神们的题解我一个都没看懂。。。。。。。。。。。十分的尴尬 题意:算出闭区间内二进制中0的个数大于等于1的个数的数字有多少个 思路: 组合数学(n小于500的时候都可以出解,只不过高精比较麻烦)。 这道题还算比较仁慈。。。Discuss里面有一段说得挺好的 看完各家算法,尝试独立分析一下: 以sample为例子 [2,12]区间的RoundNumbers(简称RN)个数:Rn

2016-07-31 13:55:08 615

原创 POJ 3641 快速幂

题意:给你两个数:p和a,如果p是素数输出no,如果p不是素数,判断a^p%p==a是否成立,如果成立输出yes,否则输出no。注意: 1.因为a和p不互质,不能用费马小定理。。。 2. 用long long // By SiriusRen #include <cmath>#include <cstdio>#include <algorithm>using namespace std;

2016-07-30 16:16:05 623

原创 POJ 3180 Tarjan

题意:找强连通中点数大于2的强连通分量个数 思路:Tarjan// By SiriusRen #include <cstdio>#include <algorithm>using namespace std;int n,m,ans=0,t=0,cnt=0,tot=1,top=0,dfn[50050],low[50050],p[10050],s[10050];int xx,yy,jy,fi

2016-07-30 15:50:28 510

原创 POJ 3185 DFS

好像可以用高斯消元???// by SiriusRen#include <bitset>#include <cstdio>using namespace std;bitset<20>b;int jy;bool dfs(int t,int pos){ if(!b.to_ulong())return 1; if(t>=jy)return 0; for(int i=p

2016-07-30 14:00:19 326

原创 POJ 3260 DP

只需要对John的付款数做一次多重背包,对shopkeeper的找零钱数做一次完全背包即可。最重要的是上界的处理。可以注意到,John的付款数最多为maxv*maxv+m,也就是24400元。同理,shopkeeper找钱最多的数目为maxv*maxv.证明如下:如果John的付款数大于了maxv*maxv+m,即付硬币的数目大于了maxv,根据鸽笼原理,至少有两个的和对maxv取模的值相等,也就是

2016-07-30 13:23:16 342

原创 POJ 2392 DP

题目大意:有一头奶牛要上太空,他有很多种石头,每种石头的高度是hi,但是不能放到ai之上的高度,并且这种石头有ci个 将这些石头叠加起来,问能够达到的最高高度。 题意转载自:http://blog.csdn.net/wangjian8006/article/details/7607745 思路: 按a[i]排个序,多重背包。 // by SiriusRen#include <cstdi

2016-07-30 12:16:59 214

原创 POJ 1384 Piggy-Bank DP

一个完全背包 很裸,对于我这种DP渣渣都能1A。。// by SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int cases,n,E,F,f[20050],w[505],v[505];int main(){ scanf("%d",&cases); w

2016-07-29 23:23:58 333

原创 POJ 1252 DP

题意:给你6个数。让你求出1~100范围内的数 最优情况下由这六个数加减几步得到。 输出平均值和最大值。 思路: 我就随便写了写,,,感觉自己的思路完全不对。 但是交上去 AC了!!! 我先当减法 不存在 完全背包 出来1~10100范围以内的最优解 然后再枚举一下从哪个地方开始减。 得出ans数组 ,,就A了。。。 完全不知道自己怎么AC的、、、// by SiriusRen#i

2016-07-29 21:55:56 287

原创 POJ 2923 DP

题意: 两辆车去运一堆货物,货物数量小于等于10,问最少需要几趟能把货物全部运到目的地。 思路: 思路很简单,就是状态压缩成二进制。判断一下每个状态能不能运输。再进行一下DP。 设s[]数组里记录所有能转移的状态。 状态转移方程:f[i|s[j]]=min(f[i|s[j]],f[i]+1) 但是。 实现起来。。求出s[]数组用的方法很重要。。 先是二重循环枚举状态 但是这会超时。。。

2016-07-29 21:29:24 527

原创 POJ 2137 DP

思路: 枚举第一个点集中起点是哪个。 因为第i个点集总和第i-1个点集和第i+1个点集相连。 我们就可以DP求出最优解了。 f[i][j]=min(f[i][j],f[i-1][k]+dis(i,j,i-1,k));// by SiriusRen#include <cmath>#include <cstdio>#include <algorithm>using namespace st

2016-07-28 21:31:23 376

原创 POJ 1466 最大独立点集

思路:匈牙利 n-ans/2;// by SiriusRen#include <cstdio>#include <cstring>#define N 505using namespace std;int jy,xx,yy,n,tot,ans;int first[N],next[N*N],v[N*N],mat[N];bool vis[N];void add(int x,int y){

2016-07-28 20:26:16 640

原创 POJ 3159 差分约束

思路: 很普通很普通的一道差分约束。。 就是Dijkstra的时候要进行堆优化// by SiriusRen#include <queue>#include <cstdio>#define N 150050using namespace std;int n,m,xx,yy,zz,tot=1;int first[30050],next[N],w[N],v[N],dis[30050]

2016-07-28 19:14:42 254

原创 POJ 3411 DFS

大致题意: 有n座城市和m(1<=n,m<=10)条路。现在要从城市1到城市n。有些路是要收费的,从a城市到b城市,如果之前到过c城市,那么只要付P的钱,如果没有去过就付R的钱。求的是最少要花多少钱。 注意:路径是有向的。解题思路: DFS。这题当有了思路后,做起来是没有难度的,但是思维推算能力要求很高。这题难点在于“城市与城市之间可能存在多条路径”: 1、 输入数据时可能会出现多条 从城

2016-07-28 16:49:34 322

原创 POJ 2665 模拟,,

It is confirmed that these sections do not overlap with each other. 一句话 就变成水题了,,,// by SiriusRen#include <cstdio>using namespace std;int n,m,xx,yy;int main(){ while(scanf("%d%d",&n,&m)&&(n|

2016-07-28 14:58:33 729

原创 POJ 3134 Power Calculus ID-DFS +剪枝

题意:给你个数n 让你求从x出发用乘除法最少多少步算出x^n。 思路: 一看数据范围 n<=1000 好了,,暴搜。。但是 一开始写的辣鸡暴搜 样例只能过一半。。 大数据跑了10分钟才跑出来。。。 看来是要加剪枝了。 剪枝1: 我们可以知道 如果花k步得到了一个数m,那么如果比k步多q步才得到m,,这肯定不是最优解。 原因: 得到m最优解的路径上在q步内总能组合出在k

2016-07-28 14:30:36 425

原创 POJ 1543 暴搜

题意:输出a^3=b^3+c^3+d^3的所有a,b,c,d的值。 b,c,d由小到大且b,c,d都大于1。 思路: 按照题意写就好。。。。// by SiriusRen#include <cstdio>using namespace std;int num[105],n,t,s[5];void dfs(int x,int pos,int remain){ if(x==4){

2016-07-27 21:48:13 334

原创 POJ 1128 Frame Stacking 拓扑排序+暴搜

这道题输出特别坑。。。。题目的意思也不太好理解。。就解释一下输出吧。。 它让你 从下往上输出。 如果有多种情况,按照字典序从小往大输出。。。 就是这个多种情况是怎么产生的呢。 下面给一组样例。 很明显 A在最底下且A在Z下,Y和这个连通块 没有相交。 答案是: AYZ AZY YAZ所以题目的意思是让你输出可能的方案。 并不管它是在第几层上。前几次WA的原因:没有考虑多种

2016-07-27 20:50:14 320

原创 POJ 1471 模拟?

题意:求最大无坏点三角形 思路: 模拟? (为什么我模拟过了。。。)// by SiriusRen#include <cstdio>#include <cstring>#include <iostream>using namespace std;char a[222][222];int cases=0,n,ans,answer,flag;int main(){ while

2016-07-23 17:36:39 467

原创 POJ 1414 暴搜

题意比较复杂 (但是很好理解) 大概意思是给你等边三角形(详见题目中的图)。 最后一行有n个数,下一次要填的数是c。 里面预先已经填好了数字。(0为未填) 得分的标准是这个分数的连通块周围没有空的地方。 就能得到连通块大小的分。 失分是 当前块能得分,但不巧,当前块内的数字是要填的数字。就失去连通块大小的分。 求这次填块最多可以得多少分。 不能不填,即分数可以为负。 思路: 其

2016-07-23 16:36:11 342

原创 POJ 3150 循环矩阵的应用

思路:首先 先普及一个性质: 循环矩阵*循环矩阵=循环矩阵 由于此题是距离小于d的都加上一个数。 那么 构造矩阵的时候 我们发现 诶呦 这是个循环矩阵 看看数据范围 n^2log(k)可以过。 那就把这个矩阵改一改。 因为这是个循环矩阵, 所以呢 只用保存一行就可以了。 每回做乘法的时候只做第一行的乘法。 for(i) for(j) temp[i]+=a

2016-07-21 16:36:08 786

原创 HDU4920 矩阵乘法

嗯嗯 就算是水题吧。 (缩完行就15行) 题意:两个n*n的矩阵相乘(n<=800),结果对3取模 思路:先对3取模,所以两个矩阵里面会出现很多0,所以可以先枚举一个矩阵,只有当该位置不是0的时候才和另一个矩阵做乘法。 取模的时候也有技巧,,不要在计算的途中取模,,, 应该读入的时候取一次模,输出的时候取一次模 计算量会小很多。// by SiriusRen#include <cstd

2016-07-20 23:15:27 865

原创 POJ 3233 矩阵快速幂&二分

题意: 给你一个n*n的矩阵 让你求S: 思路: 只知道矩阵快速幂 然后nlogn递推是会TLE的。所以呢 要把那个n换成log那这个怎么搞呢二分!当k为偶数时: 当k为奇数时: 就按照这么搞就能搞出来了 (我是看的题解才A的,,, 中间乱搞的时候犯了一些脑残的错误)// by SiriusRen#include <cstdio>#include <cstring>u

2016-07-20 22:30:20 684

原创 HDU 1757 矩阵快速幂加速递推

题意: 已知: 当x<10时:f(x)=x 否则:f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + ……+ a9 * f(x-10); 求:f(x)%m的值。 思路: 矩阵快速幂加速递推。 嗯嗯// by SiriusRen#include <cstdio>#include <cstring>using namespace std;

2016-07-18 21:44:14 1393

原创 HDU 1575 矩阵快速幂裸题

题意:中文题 我就不说了吧,。。。 思路:矩阵快速幂// by SiriusRen#include <cstdio>#include <cstring>using namespace std;int cases,n,k,mod=9973,ans;struct matrix{int a[100][100];matrix(){memset(a,0,sizeof(a));}}first,cp

2016-07-18 20:13:28 375

原创 POJ 3764 DFS+trie树

题意: 给你一棵树,求树中最长的xor路径。(n<=100000) 思路: 首先我们知道 A xor B =(A xor C) xor (B xor C) 我们可以随便选一个点DFS 顺便做出与这个点连接的其它点的xor长度 但是 枚举起点&重点+判断会TLE 所以呢 随后 就是重头戏了:trie树 这是一棵神奇的树 (莫名想到了“这是一个神奇的网站”)我们可以从高

2016-07-17 23:27:41 658

原创 POJ 2752 KMP中next数组的应用

题意: 让你从小到大输出给的字符串中既是前缀又是后缀的子串的长度。 思路: 先要了解这个东西: KMP中next数组表示的含义:记录着字符串匹配过程中失配情况下可以向前多跳几个字符,它描述的也是子串的对称程度。那么我们可以用next数组来乱搞怎么个乱搞法呢? 前缀的next[len]长度的子串和后缀next[len]长度的子串完全相同 这样就是一个解了。 我们可以不断地通过next数组

2016-07-17 21:13:10 562

原创 POJ 3613 floyd+矩阵快速幂

题意: 求s到e恰好经过n边的最短路 思路: 这题已经被我放了好长时间了。 原来是不会矩阵乘法,快速幂什么的也一知半解现在终于稍微明白了点了其实就是把矩阵乘法稍微改改 改成能够满足结合律的矩阵“加法”,也就是floyd的步骤。 我就直接把集训队论文放上来吧。。。。(证明它满足结合率的,,,现在我看着还是懵逼的) 希望以后回头看的时候能够看懂吧注意这里初始化的时候自己到自己的

2016-07-17 20:41:06 561

原创 POJ 3070 矩阵快速幂

题意: 让你用矩阵来找Fibonacci数 思路: 不用矩阵快速幂会TLE,只能学一下啦 (其实也不难)// by SiriusRen#include <cstdio>using namespace std;struct matrix{ int a[2][2]; void init(){a[0][0]=a[1][0]=a[0][1]=1;a[1][1]=0;}};m

2016-07-17 19:51:14 241

原创 POJ 2337 欧拉回路

题意: 如果给出的单词能够首尾相接,请按字典序输出单词,中间要加’.’ 否则输出三个”*”. 思路: 欧拉回路 记得按字典序排序哦~ 加边的时候要倒着加。(邻接表遍历的时候是反着的)记得清空vis数组(因为这个无脑错误WA了好长时间。。。。。)随便搞搞 就能过了。 数据不是很强…#include <cstdio>#include <cstring>#include <algor

2016-07-17 17:17:07 246

原创 NOIP 2014 T2 联合权值 DFS

背景NOIP2014提高组第二题描述无向连通图G有n个点,n-1条边。点从1到n依次编号,编号为i的点的权值为Wi ,每条边的长度均为1。图上两点(u, v)的距离定义为u点到v点的最短距离。对于图G上的点对(u, v),若它们的距离为2,则它们之间会产生Wu×Wv的联合权值。请问图G上所有可产生联合权值的有序点对中,联合权值最大的是多少?所有联合权值之和是多少?输入格式输入文件名为link.in

2016-07-17 13:06:55 265

原创 POJ 2406 KMP next数组的应用

题意:让你找最小重复串的个数加深KMP中对next数组的理解#include <cstdio>#include <cstring>using namespace std;int next[1000500],slen;char s[1000500];void get_next(){ int i=1,j=0; next[1]=0; while(i<=slen){

2016-07-17 13:00:39 636

原创 NOI 2014 动物园

经过上午的学习,终于对KMP有了初步的了解 这里就是在get_sum的时候进行了一下小小的变形。 (听说要写快速乘,网上copy了一份。 留着以后用吧)http://uoj.ac/problem/5 UOJ数据挺好的,重点是可以看别人的程序(也可以hack别人的程序)#include <cstdio>#include <cstring>#include <iostream>#define

2016-07-17 12:58:04 878

原创 POJ 3461 KMP

一道裸的KMP这里就放个模板吧。。。。以后KMP就这么写了// by SiriusRen#include <cstdio>#include <cstring>using namespace std;int alen,cases,blen,next[10500],ans;char a[10500],b[1000500];void get_next(){ int j=0;next[1

2016-07-17 12:49:20 353

原创 POJ 1200 Hash

我的hash从来没写对过。。。。。。。。 (白学了快一年OI ……原来连个hash都没写对过) 但是 但是 今天是一个值得纪念的日子。看看标题 我竟然在写hash的题解。 (好了好了 废话少说) 题意: 给你一个串,求长度为n的不同的子串的个数。 题目中的NC是什么意思 反正我没看懂,(But我能AC) 思路: QY讲的hash 随便搞搞就过了。。。// by S

2016-07-16 22:19:18 537

原创 NOIP 2012 D1T1 Vigenère密码

嗯嗯 一道找规律的题。。。。 真佩服那些把表打出来的人//By SiriusRen#include <cstdio>#include <cstring>using namespace std;char a[1005],b[1005];int main(){ scanf("%s%s",a,b); int lena=strlen(a),lenb=strlen(b)

2016-07-16 08:21:39 649

原创 POJ 2299 求逆序对个数 归并排序 Or数据结构

题意: 求逆序对个数 没有重复数字 线段树实现: 离散化。 单点修改,区间求和// by SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;long long ans=0;int n,t,f[2555555],sum[2555555],a[2555555];bo

2016-07-16 00:16:08 387

原创 NOIP2014 day2 t2 寻找道路

寻找道路 NOIP2014 day2 t2 描述 在有向图 G 中,每条边的长度均为 1,现给定起点和终点,请你在图中找一条从起点到 终点的路径,该路径满足以下条件: 1.路径上的所有点的出边所指向的点都直接或间接与终点连通。 2.在满足条件 1 的情况下使路径最短。 注意:图 G 中可能存在重边和自环,题目保证终点没有出边。 请你输出符合条件的路

2016-07-16 00:10:18 222

原创 NOIP2011 day2 第一题 计算系数

计算系数 NOIP2011 day2 第一题 描述 给定一个多项式(ax+by)^k,请求出多项式展开后x^n*y^m项的系数。 输入格式 共一行,包含5 个整数,分别为 a ,b ,k ,n ,m,每两个整数之间用一个空格隔开。 输出格式 输出共1 行,包含一个整数,表示所求的系数,这个系数可能很大,输出对10007 取模后的结果。 测试样

2016-07-16 00:06:31 345

空空如也

空空如也

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

TA关注的人

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