自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Yeason的博客

从事信息学OIer的博客

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

原创 wikioi p1174 靶形数独

这题我原先是下标程的,先贴标程代码,待会我再贴我自己的代码。pascal 不喜勿喷~type ctype=array[1..9,1..9,1..9]of boolean; nctype=array[1..9,1..9]of longint;const w:array[1..9,1..9]of integer=((6,6,6,6,6 ,6,6,6,6),

2013-08-31 17:07:44 750

原创 wikioi p1225 八数码难题

数据弱,没加优化都过了。dfs和bfs的题目我就不多说了,就是繁杂的模拟。错了的话都是小问题。#include#include#include#include#includeusing namespace std;const int max_n = 3628810;const int max_r = 4;bool f[max_n];struct no

2013-08-31 17:05:52 593

原创 wikioi p1073 家族

叫亲戚的话,大家都应该知道了吧~#include#includeusing namespace std;const int MAX_N = 5001;int R[MAX_N];int N,M,P;int findroot(int t){ if (!R[t]) return t; else return R[t]=findroot(R[t]);

2013-08-31 17:03:25 586

原创 wikio p1282 约瑟夫问题

首先这道题目的数据规模还是很大的,而且数据也比较强大的。所以这题需要用到线段树。首先建立线段树,建立孩子信息,以及该子树未出局的小朋友数量。我们建立好之后,可以add一下,计算还有多少孩子没有出局(当然如果通过循环,N-i+1就是剩余的孩子数量)把M%=N-i+1这样可以做到优化,如果空循环的话不仅没有用而且可能会导致超时。这个时候我们应该有一个上一个报到的孩子编号,然后然

2013-08-31 17:00:37 517

原创 wikioi p1081 线段树练习 2

前缀和可过。#includeusing namespace std;const int MAX_N = 100001;int A[MAX_N];int T[MAX_N];int N,Q;int init(){ int i; scanf("%d",&N); for (i=1;i<=N;i++) scanf("%d",&A[i]);}int w

2013-08-31 16:51:45 743

原创 wikioi p1080 线段树练习

暴力枚举可过。#includeusing namespace std;const int MAX_N = 100000;int A[MAX_N];int P[MAX_N];int N;int M;int main(){ scanf("%d",&N); int i; for (i=1;i<=N;i++) scanf("%d",&A[i]),P[i]=P

2013-08-31 16:50:59 508

原创 wikioi p1163 访问艺术馆

记得wikioi开站不久的时候,我做这题被吓住了。后来发现没什么难度。首先dfs序记录结点信息。Left为左孩子 right为右孩子time表示走廊的时间 cost表示价值(如果为0 表示为分岔口)int dfs()这题要详细说一下。如果记录到leaf结点那么记录下编号old_leafleaf++表示读入就要读入下一个节点那么左孩子=dfs()右孩子=d

2013-08-30 21:05:41 404

原创 wikioi p1052 地鼠游戏

题目大意 给出N个任务以及每个任务的奖励W和完成期限T,要求输出获得的最大奖励。考察算法 贪心 并查集 二叉堆算法一这道题目我们很容易想到一个贪心策略:每次让奖励最多的任务尽量准时完成。这样我们可以先把这些任务按照奖励的数目进行排序,把大的排在前面,先进行放置。假如罚款最多的一个任务的完成期限是T,我们应该把它安排在哪个时段完成呢?应该放在第T个时段,因为放在1~T任意一个位置,效果都

2013-08-27 18:03:29 810

原创 wikioi p1245 最小的N个和

这个题目的意思就是有两个集合,我们从每个集合当中任意选择一个,求最小的N个选择方案和。那么我们可以先对A B集合排序可以得到Ai+Bj同样可以得到Ai+Bj那么可以得到Ai+Bj那么我们就可以到一个很好的性质如果在A集合中选择同样的集合,B中的选择对于和有关键影响我们就可以按照这个规律建堆。有N个节点,每个节点都确定在A集合中的选择第i个节点就选择A

2013-08-27 13:37:54 1030

原创 wikioi p2144 砝码称重 2

前奏,首先这题我一开始没有思绪,后来先用dfs+打表过了。#include#include#includeusing namespace std;const int MAX_N = 1001;const int INF = 1<<30;int N,M;int f[MAX_N];int ans=INF;int countf;bool changed;int init(){

2013-08-27 13:24:02 983

原创 wikioi 提高组高精度

很简单的试商。#include#include#includeusing namespace std;const int MAX_N = 1001;const int MAX_M = 501;const int INF = 10;char a[MAX_N],b[MAX_N];int c[MAX_N],d[MAX_N],t[MAX_N],f[MAX_N];int z[MAX_N

2013-08-27 12:27:36 533

原创 wikioi p1553 互斥的数

仍然是二分,hash其实要简单多了,但关键是不熟啊~#include#include#include#include #include#includeusing namespace std;const int MAX_N = 100001;int N,P;int M;int f[MAX_N];int init(){ int i; scanf("%d %d",&N,&

2013-08-26 20:56:57 674

原创 wikioi p1230 元素查找

还没学Hash,用二分写的#include#include#include#include #include#includeusing namespace std;const int MAX_N = 100001;int N,M;int f[MAX_N];int init(){ int i; scanf("%d %d",&N,&M); for (i=1;i<=N;i

2013-08-26 20:55:49 678

原创 wikioi p1380 没有上司的舞会

第一次发个有点难度的。首先根据题目的描述可以知道,这个是一个树,有这样一个关系,如果选择了某一个节点,那么就不能够选择他的孩子节点,但是不代表不选择他的子孙。每一个节点都有一个价值,请问如何选择这棵树的节点使得他们的价值总和最大。那么我们可以建立f[i][0]和f[i][1]分别表示选择第i个节点或者不选择,他和他的子树最大的价值总和。如果不选择,则f[i][0]=Σf[x][1]

2013-08-26 20:54:56 694

原创 wikioi p1231 最优布线问题

基本复制,这些题目也没声好说的,没什么太大的技巧。主要是运用基本算法。#include#include#include#includeusing namespace std;const int MAX_N =100001;struct node { int s,t,d;}R[MAX_N]; int N;int M;long long ans=0;int T[MAX_N

2013-08-26 20:43:34 957

原创 wikioi p1078 最小生成树

恩,最小生成树。用的克鲁斯卡的算法,善用并查集。#include#include#include#includeusing namespace std;const int MAX_N =101;struct node { int s,t,d;}R[MAX_N*MAX_N]; int N;int M;int ans=0;int T[MAX_N];int cmp(c

2013-08-26 20:42:22 498

原创 wikioi p1295 N皇后问题

小c都讲过的问题,相信这个问题对大家来说都是小菜。#include#include#include#includeconst int MAX_N=14;int N;int ans=0;int A[MAX_N];int B[MAX_N*2];int C[MAX_N*2];int init(){ scanf("%d",&N);}int work(int x,int y)

2013-08-26 13:31:00 497

原创 wikioi p1294 全排列

#include#include#include#include#includeusing namespace std;const int MAX_N=11;int N;int B[MAX_N];int A[MAX_N];int put(){ int i; for (i=1;i<=N;i++) printf("%d ",A[i]); printf("\n");}i

2013-08-26 13:29:36 553

原创 wikioi p1116 四色问题

基础dfs题目,按照四个方向搜索即可。判断是否遍历过。#include#includeusing namespace std;const int MAX_N = 21;int N;int A[MAX_N][MAX_N];int T[MAX_N];long long ans=0;int init(){ int i,j; scanf("%d",&N); f

2013-08-26 13:28:54 778

原创 wikioi p1018 单词接龙

依然是字符串#include#include#include#includeint g_n,g_maxLen,g_mark[21]={0};char g_start,g_words[21][50],g_word[1000];void inPut(){int i;scanf("%d",&g_n);for(i=1;i<=g_n;i++){scanf("\n%s",g_wo

2013-08-26 13:27:04 1047

原创 wikioi p1099 字串变换

还是字符串,继续贴pascal。还是对不起咯~博客正在慢慢写。目前的题目难度的确不是很高。但是难得我也不会。所以我会发一些有难度但是不至于我们做不出来的题目。(ms.27的朋友们)type jj=record s:string; d:longint;end;varhead,tail:array[1..2] of longint;q:array[1..

2013-08-26 13:26:11 667

原创 wikioi p1040 统计单词个数

本人最讨厌字符串,题目都没怎么看。我估计让我写我自己也不一定都写得对这次对不起咯,我也不会啊~pascal代码。const maxle=202; maxk=40; maxs=6;type strr=string[maxle];var f:array[0..maxle,0..maxk]of integer; g:array[0..maxle,0..maxle]

2013-08-26 13:24:01 622

原创 wikioi p1039 数的划分

叶老师说过,记忆化搜索。#include#includeusing namespace std;const int MAX_N = 201;int f[MAX_N][MAX_N];int work(int n,int k){ if (f[n][k]) return f[n][k]; if (n<k)return 0; if (n==k) return 1;

2013-08-26 13:22:00 594

原创 wikioi p1017 乘积最大

简单的划分型动态规划,如果不懂,善用搜索引擎。主要是解决高精度的麻烦。这种比较简单的题目还是直接贴代码。主要也是分享代码。毕竟这种题目比较简单。#include#include#include#include#includeusing namespace std;const int MAX_N = 41;const int MAX_L = 1001;const

2013-08-26 13:20:30 521

原创 wikioi p1169 传纸条

传纸条这一题的难度在于两个人的路径不能重复,相信解决了这个问题绝大多数OIer都没问题了,当然如果还不行请看看数字三角形吧。这一题我们可以有一个逆向思维:两个人分别从两个起点a(1,1)->(m,n) b(m,n)->(1,1)我们也可以假定a也是从(m,n)向(1,1)传递,虽然方向不同,但是不影响路径的大小。那么我们假定a走的是下行路线。b走的是上行路线。即a从下面的路径走,b

2013-08-25 13:57:11 608

原创 wikioi p1220 数字三角形

仍然是很基础的题目#include#includeusing namespace std;const int MAX_N=101;int N;int A[MAX_N][MAX_N];int F[MAX_N];int init(){ int i,j; scanf("%d",&N); for (i=1;i<=N;i++) for (j=1;j<=i;j++) scanf(

2013-08-25 13:18:06 390

原创 wikioi p1219 骑士游历

直接贴代码,还是用的记忆化。#include#includeusing namespace std;const int MAX_N=51;int N,M;long long A[MAX_N][MAX_N];int x1,y1,x2,y2;int init(){ scanf("%d %d",&N,&M); scanf("%d %d %d %d",&

2013-08-25 13:16:48 579

原创 wikioi p1010 过河卒

这题我为了图省事,直接在原先的dfs上,加了一个记忆化。#include#include#includeusing namespace std;const int MAX_N = 21;const int MAX_M = 9;bool map[MAX_N][MAX_N];int f[MAX_N][MAX_N];int dx[]={1,1,-1,-1,2,2,-2,-2,0};

2013-08-25 13:15:25 623

原创 wikioi p1166 矩阵取数游戏

这题是动规还好  问题是要加功能很齐全的高精度   一下子就变得恶心了高精度没法说.....就不说了...dp[i][j] 表示计算的那一层还剩下为 [ i , j ] 的区间 保存之前取数的最大值 首先因为每一层求得最值都互不影响所以for( res  1->n)枚举每一层的最大值然后for( k  1->m)枚举第几次取数 同时计算2的k次幂最后枚举左区间( L  1-

2013-08-25 13:13:38 1041 1

原创 wikioi p1154 能量项链

这也是非常经典的一道题目,简单普及一下知识,矩阵乘法拥有结合律,但是没有交换律。       老师讲过,不多说。#include#include#include #includeusing namespace std;const int MAX_N = 201;int f[MAX_N][MAX_N];int R[MAX_N];int N;int ans;int init

2013-08-25 12:58:59 853

原创 wikioi p1048 石子归并

最简单的区间型动态规划。       为了方便起见,做了一个显而易见的操作,S数组,S[N]记录从1到N的和。       则从I到J的和为S[J]-S[I-1]#include#include#include #includeusing namespace std;const int MAX_N = 101;int f[MAX_N][MAX_N];int R[MAX_N

2013-08-25 12:55:57 485

原创 wikioi p3027 线段覆盖 2

这题需要说明一下。       可以得到方程 如果用R表示线段,里面s t分别存储左端点和右端点,w表示线段价值。       f[t]表示t坐标的最大线段价值和。       f[R[i].t]=max(f[R[i].t],f[R[i].s]+R[i].w);       注意这里两条线段的端点是可以重合的,所以是f[R[i].s]而不是f[R[i].s-1]       但

2013-08-25 12:53:11 521

原创 wikioi p1576 最长严格上升子序列

注意是严格,所以是严格小于的Ai#include#includeusing namespace std;const int MAX_N = 100001;int ans = 0;int N;int t[MAX_N];int f[MAX_N];int init(){ scanf("%d",&N); int i; for (i=1;i<=N;i++) scanf("%d"

2013-08-25 12:35:38 498

原创 wikioi p1044 拦截导弹

就是基本模型,没有什么好说的。#include#include#includeusing namespace std;const int MAX_N = 10001;int A[MAX_N];int f[MAX_N];int r[MAX_N];int N=0;int fans,rans;int init(){ int i; while(cin>>A[++N]); N

2013-08-25 12:34:26 545

原创 wikioi p1014 装箱问题

背包问题DP,可以把物品的体积作为价值。#include#includeusing namespace std;const int MAX_V = 20001;const int MAX_N = 31;int V,N;int v[MAX_N];int f[MAX_V];int init(){ int i; scanf("%d %d",&V,&N); f

2013-08-25 12:30:57 494

原创 wikioi 高精度

简单的题目糅合在一起。请分别调用jia jian cheng chu#include#include#includeusing namespace std;const int MAX_N = 25002;const int INF = 10;char a[MAX_N],b[MAX_N];int c[MAX_N],d[MAX_N],f[MAX_N];int lengtha,len

2013-08-24 22:21:44 526

原创 wikioi p1214 线段覆盖

构造包涵起始时间的struct,按结束时间递增排序。贪心策略:每次挑起始时间满足条件的最早结束的线段。反证:如果挑比其晚结束的线段,那么下一条合理的线段势必可以满足刚才最早结束的线段,故每次挑最早结束的线段。

2013-08-24 22:20:00 449

原创 wikioi p1098 均分纸牌

首先这题分类在贪心下面,当然我们也可以通过一定的方式得到它的正确性:       如果从A向B移动R个纸牌,也就相当于从B向A移动了-R个纸牌。       那么假设有纸牌Ai Aj Ak       当然我们可以实现扫描一遍总的纸牌数,则可以得到每一堆应该拥有的纸牌个数是ad=sum/N       若Ai-ad=Xi       则分别需要移动Xi Xj Xk(xi,xj,

2013-08-24 22:18:31 617

原创 wikioi p1000 A+B问题

#includeusing namespace std;int main(){ int a,b; scanf("%d %d",&a,&b); printf("%d",a+b); return 0;}

2013-08-24 12:19:21 466

原创 wikioi p3145 汉诺塔游戏

wikioi天体通过初赛的最后一题了。#includeconst int MAX_N = 11;int N;int f[MAX_N];int init(){ scanf("%d",&N);}int putans(){ f[1]=1; int i; for (i=1;i<=N;i++) f[i]=f[i-1]*2+1; printf

2013-08-24 12:15:55 759

空空如也

空空如也

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

TA关注的人

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