自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

JIBANCANYANG

并非所有流浪者都迷失了自我。

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

原创 hdu 1544 连续回文子串的个数 构造法

思路:子串的长度只能为奇数或偶数(长度为1的不算,直接特判)。对于长度为奇数的子串,以22到nn之间的数为该子串的中心,然后分别向两边扩展,只要碰到一个子串扩展不满足回文的,就退出。对于偶数长度的子串分别以1到n - 1之间的数为左,该数右边的数为右,组成两个数,然后再拿这两个数扩展。 代码:#include <queue>#include <set>#include <map>#incl

2015-04-30 10:33:09 1144 2

原创 SCU集训队第四次周赛

A题(hdu2600 war):用数组记录标记即可,开始不知道是多组数据以为是Coderforces的题数wa,以后周赛还是都写成多数据吧也好调试,然而多数据就要多注意初始化了。罗大神一直挂在名字可能有多个单词。 我这种开数组模拟的方法如果数据再大点就会ML,最好把开始和结尾存到一个结构体数组中,以终点为标准来结构体排序(如果终点相同起点小的靠前),然后从数组的最右边开始扫,如果第一个数都终点小于

2015-04-27 21:01:14 633

原创 poj 3253 哈夫曼树

背景:开始自己想了一个贪心思路,结果是错的。其实这个题是哈夫曼树的思想,贪心只是哈夫曼树的证明和构造思想。 哈夫曼树:一种带权最短二叉树(也就是所有叶子节点的权重乘以深度的和最小),在实际中是用来做最高效信息编码的。信息的频率就是权重,一个频率很低的数,它的编码就应该长,树的深度就应该大。实际信息编码会根据信息字符的频率来构建一个哈夫曼树,已达到最高效。本题和哈夫曼树是一个很好的契合,解决本题

2015-04-26 09:03:35 920

原创 SCU集训队第三次周赛记录

A题(Win or Freeze)(博弈&数论):题目大意:对于1个数q,a和b两个人参与游戏,每一轮只能把q分解成q的所有因子中(且当一个人来分的时候他用的是最优决策),不是1和本身的因子,当其中一个人面对的数无法再被分解的时候该人获胜。数论知识补充: 算术基本定理:一个大于xx的自然数能被唯一确定的分解为有限个质数的乘积:x=pa11pa22pa33...pannx=p_1^{a1}p_2

2015-04-25 22:38:48 445

原创 poj 2431 优先队列&贪心

几个概念:完全二叉树:是指除叶子节点那层外,叶子节点以上的第k层都含有2k2^k个节点而且叶子节那层的节点都靠左方。满二叉树:与完全二叉树先比,多了连叶子节点也要全满的限制条件。堆的代码实现(数组实现):int heap[10000], sz = 0;void push(int x) { //向堆里面增加元素X int i = sz++, p; while(i > 0)

2015-04-18 17:38:12 531

原创 挑战程序设计竞赛 二叉堆(优先队列)的实现

几个概念:完全二叉树:是指除叶子节点那层外,叶子节点以上的第k层都含有2k2^k个节点而且叶子节那层的节点都靠左方。满二叉树:与完全二叉树先比,多了连叶子节点也要全满的限制条件。堆的代码实现(数组实现):int heap[10000], sz = 0;void push(int x) { //向堆里面增加元素X int i = sz++, p; while(i > 0)

2015-04-17 18:26:17 726

原创 挑战程序设计竞赛 划分数,贝尔数,斯特灵数

斯特灵数:把nn个数划分为恰好kk个非空集合的个数,记为S(n,k)S(n, k)。且有:S(n,1)=S(n,n)=1S(n, 1) = S(n, n) = 1。 有递推关系式:S(n+1,k)=S(n,k−1)+kS(n,k−1)S(n + 1, k) = S(n, k - 1) + kS(n, k - 1) 贝儿数:把nn个数划分为非空集合的所有划分数。有:Bn=∑i=0nS(n,i)Bn

2015-04-17 11:01:04 848

原创 poj 2533 最长上升子序列

背景:最长上升字串,自己想了好久,想出了O(n2)O(n^2)的方法,书上写有O(nlogn)O(nlogn)的方法。#include #include #include #include using namespace std;const int M = 1009, INF = 0x3fffffff;int main(void) { int n, str[1009],

2015-04-14 17:24:10 429

原创 Google codejam Qualification Round 2015 B 巧妙枚举结果 + 贪心

背景:想了好久只想到用深搜的指数级别枚举办法来过了小数据,大数据自然超时,后来看了解题报告,才过。 思路:当前所有盘子中,煎饼个数最多的盘子里有n个煎饼,i 从 1 … n 枚举分裂之后的煎饼最多盘子里的个数,然后用贪心的方法计算要达到当前状态所需的最少分裂步数 k ,最后用时就是 i + k ,求出所有用时中最小的即可 感悟:这个题的精华之处是所有最终状态最多只有1000种,对于每种最终状态所

2015-04-13 21:12:40 460

原创 挑战程序设计竞赛 多重部分和问题(恰好装满的完全背包)

这里一般的完全背包做法:转化为01背包(可以对01背包进行二进制优化),复杂度是O(n∗V∗logV/cost[i]2)O(n*V*log^{V/cost[i]}_2)。 这里巧妙的定义了一种方法让复杂度降到了O(n∗V)O(n*V) **转移方程思想:定义能装满dp[i][j]为容量为j时,第i种物品的剩余个数,则: if (dp[i-1][j] >= 0),dp[i][j]=m

2015-04-11 15:12:17 1093 2

原创 挑战程序设计竞赛 01背包变换对象

01背包式最简单的背包问题,书上是由深度优先搜索的记忆化搜索的递归实现到处递推的解决方法就是01背包,把所有i和j的情况都记下来,总共不过n*v种情况。 而01背包之2是简单01背包变换对象之后的做法。 题目描述如下: 有n个价值和花费分别为weight[i]和cost[i]的物品,把这些物品装进容量为V的背包中,求最大价值? 但是现在条件是:V<=109,weight[i]<100,n<1

2015-04-11 13:50:37 960

原创 hdu 1159 经典dp最长公共子序列

背景:上次比赛就没有做出来,回来根据实际意义半天也想不出如何dp,结果从猜转移方程入手,竟然想对了!开始想把空间优化到一维数组,没有想到要用同维度左边的值wa了。思路:dp[i][j]=max{max[i-1][j],max[i][j-1],max[i-1][j-1]+(a[i] == b[j])}//dp[i][j]定以为,a串的前i个字符和b串的前b个字符的最大字串和,为选a串的第i

2015-04-10 22:37:00 556

原创 poj 3253 哈夫曼树

背景:开始自己想了一个贪心思路,结果是错的!!

2015-04-10 17:08:07 592

原创 poj 3069 贪心

背景:1Y,但是思考的时候并没有充分思考好思路再写,而是有点含糊的边写边想,这样不好,一定要思路已经十分明确了再写。思路:从一个没有被覆盖的点开始,在以它为中心半径为r的区域内,至少有一个点标记,那么就选择,距离它最远的点。标记这个点之后,算出下一个没有被标记的点,重复以上操作即可。这里把最后一个数据的后一个数调为INF是解决之后一个数的良好方法。贪心策略往往是十分高效的方法,这需要十分良

2015-04-10 15:44:04 612

原创 poj 3617 贪心

背景:第一次没有考虑到相等的情况,wa了,改正后re了几次。。。思路:贪心思想,但是当两边都相等的时候选哪一边才是关键,这是我的处理方法是,继续对2和n-1个字符比较,如果2小就从左边开始,n-1小就从右边开始,如果还是相等就继续比较2和n-2........书上的思想也是类似原理。我的代码:#include#include#includeusing namespace std;

2015-04-10 11:23:17 589

原创 《挑战程序设计竞赛》 2^n类型的深搜

题意:从n个数中选取任意个数的数,看是否等于k。代码给出了十分清晰简洁的优雅递归写法。#include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long int LL;const in

2015-04-09 22:14:56 629

原创 poj 1852思维题

背景:挑战程序设计竞赛上的题,好思维。来就想暴力枚举都还没有仔细思考有没有数学规律,n超过20就不适合用2的n次方的算法了。思路:最短时间十分容易讨论,这里最大时间很巧妙,两只蚂蚁相撞然后各自反向走,可以想成两只蚂蚁绕过,各走各的,这样早最大时间就简单了,就是所有走到端点的时间中最大的。代码:#include #include #include #include #include

2015-04-09 18:11:59 596

原创 UVa 514 数据结构栈

背景:1A思路:栈模拟我的代码:#include #include #include #include #include #include #include #include #include #include #define LL long long intusing namespace std;const int M=1009,INF=0x3fffffff;i

2015-04-07 18:06:05 550

原创 soj 2222 01背包变形

背景:wa~Tl~看来背包还是很欠缺啊~思路1(1500ms):变形的01背包。把题目改为:选择一组HP和大于等于所需血量且这组物品的分数之和最小,即可。这里把HP看做cost,score看做weight。但是这个题有个特点是最后选择HP必须大于等于k,容易想到,最多我们会有k+10000(10000为单个物品的最大HP值)的HP值,所以我们有这样的转移方程:for i 0....n 

2015-04-07 16:17:54 524

原创 UVa 1592模拟(map)

背景:第一因为找到结果之后没有及时的停止查找而wa了一发,改正后ac。思路:首先对读入的每一个string,设置一个独特的ID,这样就把string变为int,后来比较的时候就会简化很多,设置ID的时候用map来赋予每一种string对应一个独特的ID。然后构建一个key为pair的map,因为行比较多列比较少(列的数为10),就枚举列的所有组合,然后对每组组合来进行map判重。我的代码;

2015-04-05 09:26:44 963

原创 poj 3083 dfs+bfs

背景:竟然G++,wa了一发,同样的代码,改为C++就过。。。后来看了discuss里面人说bfs最后虽然不会用到有return 的情况,也要加上,这个warning警告了的,没想到加上就ac了。。。思路:bfs求最短路,然后就是对一直向左和一直向右进行dfs,方法是:记录上一次来的方向,然后根据上一次来的方向确定当前方向怎样才是向左,怎样才是向右,向左的话是顺时针转动,向右的话是逆时针转动。

2015-04-03 13:12:23 560

原创 UVa 400 模拟vector

背景:多久没有一次ac过了,要提升一次ac的几率啊!这对比赛是很重要的。思路:这个题主要是更加熟悉了下vector,然后就是一些格式的问题,构造即可。主要感受还是一定要把思路想好再写题!#include #include #include #include #include #include #include #include #include #define LL long

2015-04-02 22:55:14 577

空空如也

空空如也

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

TA关注的人

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