自定义博客皮肤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的博客

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

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

原创 POJ 3280 DP

题意: 思路: DP f[i][j]表示把i到j变成回文串的最少代价f[start][end]=f[start+1][end]+min(node[a[start]].del,node[a[start]].add);f[start][end]=min(f[start][end],f[start][end-1]+min(node[a[end]].add,node[a[end]].del)

2016-09-29 11:39:47 1063

原创 POJ 2151 概率DP

思路: f[i][j][k]表示i所学校 前j题 解出了k道 初始化f[i][0][0]和f[i][1][0] f[i][j][k]=f[i][j-1][k-1]a[i][j]+f[i][j-1][k](1-a[i][j]);这个时候f[i][n][k]表示第i所学校做出k道题的概率我们可以维护一个 sum[i]表示第i所学校做出1<=x<=n道题的概率 kth[i]表示第i所学校做出1

2016-09-29 10:19:47 348

原创 POJ 2528 线段树

坑: 这道题的坐标轴跟普通的坐标轴是不一样的……此题的坐标轴 标号是在中间的……线段树建树的时候就不用[l,mid][mid,r]了(这样是错的) 直接[l,mid][mid+1,r]就OK了Discuss里面的人们很纠结啊…….//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using names

2016-09-29 00:18:07 379

原创 POJ 3277 线段树+扫描线

题意: 思路: 线段树求矩形面积的并。。。同 POJ 1151//By SiriusRen#include <cstdio>#include <algorithm>using namespace std;#define N 88888int n,u,tot,xx,yy,h[N];long long ans;struct Node{int x,h,cover;}node[4*N]

2016-09-29 00:15:51 631

原创 POJ 1151 线段树+扫描线

注意是[l,mid][mid,r] 这是真正的线段了 就当扫描线模板使吧~//By SiriusRen#include <cmath>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define eps 1e-5int N,tot,n,cases;double y[666],a

2016-09-29 00:12:28 619

原创 POJ 2828 线段树 逆序插入

思路: 1.线段树 逆着插入就OK了 2.块状链表 (可是我并不会写)//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int n,xx,tree[1000050],cnt[1000050];struct Node{int num,wei;}node[1

2016-09-28 13:46:58 575

原创 POJ 3669 简单BFS

标号 搜 完了……//By SiriusRen#include <queue>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int n,t,xx[]={1,-1,0,0,0},yy[]={0,0,1,-1,0},map[666][666],vis[666][555];struct

2016-09-28 13:44:41 336

原创 POJ 3672 水题......

5分钟写完 水水更开心//By SiriusRen#include <cstdio>#include <iostream>#include <algorithm>using namespace std;int m,t,u,f,d;char jy;int main(){ scanf("%d%d%d%d%d",&m,&t,&u,&f,&d); for(int i=1;i

2016-09-28 13:43:23 442

原创 POJ 3279 枚举?

思路: 1.枚举第一行 递推剩下的 判断最后一行成不成立 2. (误)高斯消元? 如何判断1最少和字典序最小… (所以这种做法好像不可取)//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int n,m,a[16][16],temp[16][16]

2016-09-28 13:42:12 671

原创 POJ 3671 DP or 乱搞

思路: 1.DP f[i][j]:前i个数 最后一个数是j的最小花费 f[i][j]=min(f[i][j],f[i-1][k]+(a[i]!=j));1<=k<=j 这种做法比较有普遍性… 2. 直接枚举断点乱搞不就行了嘛… 枚举在哪儿转折成的2 (注意全是1或者全是2的情况就OK了)//By SiriusRen#include <cstdio>#include <cstring

2016-09-28 13:38:32 599

原创 POJ 3145 线段树 分块?+暴力

思路: 线段树 (分类讨论)此题数据很水 数据很水 数据很水 但是卡个暴力还是没问题的……//By SiriusRen#include <cstdio>#include <cstring>using namespace std;#define maxn 1500000#define inf 1061109567int n,tot,jy,xx,yy,tree[maxn*6]

2016-09-28 09:07:02 460

原创 POJ 3668 枚举?

枚举两点,算一下斜率 sort一遍 判个重 输出解 25行 搞定…//By SiriusRen#include <cmath>#include <cstdio>#include <algorithm>using namespace std;int n,top,ans;double x[205],y[205],s[40005],temp;int main(){ scanf

2016-09-26 23:01:00 371

原创 POJ 3225 线段树+lazy标记

lazy写崩了…….查了好久/* U—> [l,r]–>1 I—> [1,l-1] [r+1,+无穷] –>0 D—> [l,r]–>0 C—> [1,l-1] [r+1,+无穷]–>0 xor[l,r] S—> [l,r]–>xor *///By SiriusRen#include <cstdio>#include <cstring>#include <algorit

2016-09-26 21:38:59 280

原创 POJ 3670 DP LIS?

权值为1~3 好了 此题是水题…… i表示到了第i个数,j表示结尾的数是j f[i][j]=min(f[i][j],f[i-1][k]+(a[i]!=j)) 1<=k<=j 最长上升的.同理我们可以再写一个g[i][j]表示最长下降的//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using

2016-09-26 16:27:52 507

原创 POJ 3667 线段树+标记

自从某次考试写线段树写挂了以后 这是第一次写线段树,,,,,,这是一个伤心的故事…… 题意: 思路: 标记 维护从左到右的最大值 从右到左的最大值 区间内的最大值……然后就一搞 就出来了//By SiriusRen#include <cstdio>using namespace std;int n,m,jy,xx,yy,d,D;struct Tree{int

2016-09-25 17:39:45 565

原创 POJ 3013 Dijkstra

从1节点最短路,,然后再乘一下权值就OK了//By SiriusRen#include <queue>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N 132000long long d[N];int n,m,first[N],next[N],v[N],w[N],t

2016-09-25 15:52:00 349

原创 POJ 2449 第k短路 Dijkstra+A*

这道题我拖了半年,,,终于写出来了 思路: 先反向建边 从终点做一次最短路 —>这是估价函数h(x) 再正常建边,从起点搜一遍 (priority_queue(h(x)+g(x))) g(x)是已经走过的。。思路比较简单,,, 但是我总是MLE原因:写挫了……刷了三页… …//By SiriusRen#include <queue>#include <cstdio>#in

2016-09-25 15:50:28 448

原创 POJ 3665 模拟

按照题意模拟就OK了//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int n,t,a[1005];int main(){ scanf("%d%d",&n,&t); for(int i=1;i<=n;i++){ scanf("

2016-09-25 15:44:41 599

原创 POJ 1141 括号匹配 DP

黑书原题 区间DP,递归输出 不看Discuss毁一生 (woc还真有空串的情况啊)//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int n,f[111][111];char s[111];void print(int l,int r){

2016-09-25 15:43:54 346

原创 POJ 1631 nlogn求LIS

方法一: 二分我们可以知道 最长上升子序列的 最后一个数的值是随序列的长度而递增的 (呃呃呃 意会意会)当我们枚举到i的时候 就从已知的最长上升子序列中找到第一个比它大的值,并取个min//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int n,cas

2016-09-25 14:34:07 598

原创 POJ 1274 二分图匹配

匈牙利算法 裸题//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int n,p[8085],first[8888],next[8888],v[8888],tot,vis[8888],m,xx,yy,ans;void add(int x,int y){v[tot

2016-09-25 14:28:49 516

原创 POJ 3661 DP

题意: 思路: i表示到了i,j表示疲劳度为j f[i][j]表示能跑的最大距离 f[i][j]=f[i-1][j-1]+a[i] if(i-j>=0)f[i][0]=max(f[i][0],f[i-j][j]); f[i][0]=max(f[i][0],f[i-1][0]);//By SiriusRen#include <cstdio>#include <cstring>#i

2016-09-25 14:26:47 374

原创 POJ 3662 二分+Dijkstra

题意: 思路: 二分+Disjktra二分一个值 如果某条边的边权比它小,则连上边权为0的边,否则连上边权为1的边最后的d[n]就是最小要免费连接多少电话线。//By SiriusRen#include <queue>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#def

2016-09-25 14:23:19 736

原创 POJ 3666 DP

题意: 思路:dp[i][j] 表示前i + 1个数变成单调且最后一个数是B[j],此时的最小成本dp[i][j] = min(dp[i – 1][k]) + |A[i] – B[j]| 【k = 0->j】但是我们发现现在的复杂度是O(n^3) 卡不过去怎么优化呢 保存个最小值不就行了嘛….复杂度O(n^2)Ps:这道题可以优化空间…//By SiriusRen#inclu

2016-09-25 14:18:35 185

原创 POJ 2373 单调队列优化DP

题意: 思路: f[i] = min(f[j]) + 1; 2 * a <= i - j <= 2 *b; i表示当前在第i个点。f[i]表示当前最少的线段个数 先是N^2的朴素DP(果断TLE)//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;i

2016-09-25 14:11:37 330

原创 祝自己生日快乐

草草度过16岁生日,祝自己生日快乐吧

2016-09-19 22:42:49 752

原创 POJ 2385 DP

竟然自己想出转移方程了 (吃鲸)(这是水题(尴尬))题意: 思路: 初始化 f[i][m+1][0]=f[i-1][m+1][0]+(a[i]==1); f[i][m+1][0]=f[i-1][m+1][0]+(a[i]==1); 转移 f[i][j][0]=max(f[i-1][j][0],f[i-1][j+1][1])+(a[i]==1); f[i][j][1]=max(f

2016-09-19 16:07:05 180

原创 POJ 3122 Pie 二分答案

题意:给你n个派,每个派都是高为一的圆柱体,把它等分成f份,每份的最大体积是多少。 思路: 明显的二分答案题…… 注意π的取值… 3.14159265359 这样才能AC,,,//By SiriusRen#include <cstdio>using namespace std;int n,f,cases,a[10050];double v[10050];bool check(do

2016-09-18 19:22:57 617

原创 BZOJ 1024 SCOI2009 生日快乐 暴搜

思路:eng。。。按照题意搜就好了 (一定要注意题面的n<=10……) 枚举断点。。。反正n<=10不怂//By SiriusRen#include <cstdio>#include <algorithm>using namespace std;int n,m,k;double ans=0x3fffffff,area;double dfs(double x,double y,in

2016-09-14 23:58:27 273

原创 POJ 3190 priority_queue 贪心

思路: 贪心?就算是吧 先把所有的开始时间排个序 如果当前的能匹配上已有的牛栏,就找开始时间最早的那个。 否则新加一个牛栏 整个过程用priority_queue时限就OK了。。//By SiriusRen#include <queue>#include <cstdio>#include <algorithm>using namespace std;int n,t=1,s[555

2016-09-14 23:52:44 349

原创 POJ 3273 二分答案

思路:二分答案经典题吧。。。。注意边界就OK了//By SiriusRen#include <cstdio>#include <algorithm>using namespace std;int n,m,a[100050],ans;bool check(int x){ int jy=0,temp=0; for(int i=1;i<=n;i++){ if(a[

2016-09-14 23:49:47 741

原创 POJ 3173 模拟

按照题意模拟就好……//By SiriusRen#include <cstdio>#include <algorithm>using namespace std;int n,s,tot;char a[21][21];int main(){ scanf("%d%d",&n,&s); for(int i=1;i<=n;i++) for(int j=1;j<i;

2016-09-14 23:48:13 417

原创 POJ 3187 全排列+杨辉三角(组合数)

思路: next_permutation()加个递推组合数随便搞搞就A了…//By SiriusRen#include <cstdio>#include <algorithm>using namespace std;int n,C[11][11],sum,f[11];int main(){ scanf("%d%d",&n,&sum); for(int i=1;i<=n;i

2016-09-14 23:47:06 608

原创 POJ 2478 线性递推欧拉函数

题意: 求sigma phi(n) 思路: 线性递推欧拉函数 (维护前缀和)//By SiriusRen#include <cstdio>using namespace std;#define maxn 1000005#define int long longint n,p[maxn+100],s[maxn+100],phi[maxn+100],tot;void Phi(){

2016-09-14 23:45:29 769

原创 POJ 2110 二分+暴搜

题意: 给你一个矩阵 ,你能往各个方向走(不走出去就行),每次只能上下左右走一格,问路径上的点权最大值和最小值的差最小是多少。 思路: 首先 二分最后的答案, 暴力枚举当前的区间是啥。 DFS 就OK 了 (我的代码可能有点儿小问题…… 枚举的时候没有判左上角的点) (但是AC了哈哈哈)//By SiriusRen#include <cstdio>#include <cstr

2016-09-14 23:42:54 670

原创 POJ 4007 Flood-it!

题目:http://poj.org/problem?id=4007思路: (lyd学长的思路) IDA*算法,首先迭代加深限制搜索深度。 可以发现如果当前矩阵中除了左上角的连通块之外,共有M种颜色,那么还需要的步数不小于M。如果当前搜索深度+估价函数的值>深度限制,可以剪枝。 如果改变颜色后,左上角格子所在的联通块大小没有改变,可以剪枝,避免来回往复地搜索。 每次寻找左上角的格子所在的连通

2016-09-08 23:15:37 490

原创 POJ 2248 搜索

剪枝: 1.从后向前枚举 2.迭代加深 然后就0msAC了//By SiriusRen#include <cstdio>using namespace std;int n,T,s[105];bool dfs(int t){ if(s[t]==n)return 1; if(t>=T)return 0; for(int i=t;i>=1;i--){

2016-09-08 17:51:17 414

原创 TYVJ 1340 折半暴搜+二分

思路: 1. 这 题 不卡常过不去啊…… (先加一个random_shuffle) 首先 我们可以折半 搜这一半可以到达的重量 sort一遍然后搜另一半 对于路程中每一个解 我们可以二分前一半中加这个解最接近w的值,更新ans剪枝: 对于第一次搜索 显然的剪枝:和不能大于w 对于第二次搜索 如果当前的解小于最大的remain 退出我的搜索纯凭运气&数据…… 数据和w相差比较

2016-09-08 17:23:53 565 2

原创 NOIP2012 T3开车旅行 set+倍增

70分做法: 先预处理出所有点的最近和次近(O(n^2)一遍就OK) 然后暴力求出每个解(O(nm))//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>#define inf 0x3fffffffusing namespace std;int n,x,rech=0x3fffffff,rec,s,m

2016-09-07 09:54:14 803

原创 TYVJ 1541 八数码

Orz双向搜索的cy大神我用的是hash 也蛮快的//By SiriusRen#include <queue>#include <cstdio>using namespace std;#define mod 1000007struct node{char a[4][4],cnt;}a,b;char xx[]={1,-1,0,0},yy[]={0,0,1,-1};int vis[1000

2016-09-05 21:29:37 324

空空如也

空空如也

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

TA关注的人

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