- 博客(16)
- 收藏
- 关注
原创 hdu 1241
背景:dfs递归实现。思路:对于每一个@都把和组成一个片区相连的所有@变成*,并计数一次。#include#include#includeusing namespace std;char map[105][105];int direction[8][2]={1,0,1,1,1,-1,0,1,0,-1,-1,0,-1,1,-1,-1};void dfs(int i,int
2015-02-27 11:25:35 727
原创 hdu 2546 01背包
背景:1——WA:卡上最低要求为5元才能消费的边界情况没有处理。思路:首先判断卡上余额是否有五元,不是直接输出。然后,从卡里面拿出五元来买最大价值,剩下的钱尽可能用完就可以了。学习:1.这里透露了一个基本问题:从n个数中选取m个数,使这m个数的和尽可能的接近k。这个体是把k看做背包的容量,把一个数的值既看做价值又看做体积,转化为01背包问题。我的代码:#include#include
2015-02-10 11:45:33 486
原创 hdu 1171 01背包变形
背景:1Y对于背包写法,不太熟,想法也不够深,写起来,容易犯小错误。思路:把sum/2当做背包的最大容量,求这个最大容量能够装下的最大价值,这个题的灵活之处就是把价值和体积都看做题中给的价值,那么相当于,一份体积有一份价值。所以sum/2的体积产生的价值势必小于等于sum/2,这样我们求出这个最接近sum/2的值即可。这个题的思路比较巧妙,一是把看似两方面的问题转化为单方面要接近一半的问题
2015-02-10 10:58:09 647
原创 hdu 2602 01背包深入优化
背景:没有认真读题目条件,搞错输入顺序而wa了一次。自己做的第一道DP题,看了好久终于把背包九讲的01背包看懂了。学习:1.01背包的特点是:物品个数有限,切对于每一个物品可以选择放或者不放。其中的名称01,大概就是1(放)0(不放)的意思吧。 传统的背包写法使用二维数组,时间和空间都是O(VN),当把j由0.....n,换为n.....0之后空间优化为O(V),然后做了两点剪枝,
2015-02-08 22:34:03 515
原创 STL 库函数测试
学习:1.深入理解了C++里引用: A:引用的定义:数据类型名 &引用名=变量名;(引用不同于指针之处是:引用在声明的时候必须同时初始化) B.引用只是变量的一个别名,在操作引用和操作原变量名的时候都是操作内存区域上的同一个区域。 C.引用的应用: a.作为函数的参数参与传值,类似于c语言指针的作用。这里才明C语言中指针传值的优点:
2015-02-08 15:43:36 667
原创 UVa 136 丑数
背景;开始没有充分理解题意:不能被2,3,5以外的其它素数整除。在整除的数学中,素数相当于基,任何除了一以外的数,都是由素数基相乘而得。思路:有第一个丑数1,开始,每一个丑数*2,*3,*5生成下一个丑数。这样依次生成。学习:1.算术基本定理:每一个大于2的数总是由素数因子相乘而得,且个素数因子的个数是确定的。我的代码;#include#includeusing names
2015-02-08 11:53:25 554
原创 UVa 540 queue的使用
背景:书上的思路很好,开始自己想的思路行不通,因为queue定义的操作太少,不可直接访问内部内容,也不可以插入。思路:用了一个主队列,和一个队列数组。主队列里储存的是队名,每一个队名对应一个队列数组中的团体。学习:1.用一个map来记录队员和队员的队名是十分好的方法,应为map内部是红黑树实现,查找效率是log(n)。代码:#include#include#include#inc
2015-02-07 16:46:57 600
原创 UVa 12096 map ,vector,set,string ,stack的混用
背景:这个题对stl不熟悉根本无法自己作,只有照着理解书上的代码。思路:用一个vector容器来储存集合,map中key为集合,value为该集合对应的vector容器的下标,并把下标称为ID,stack中储存的是ID每次对stack执行操作,实际是对stack中ID对应的集合执行操作用到了set_uinon和set_intersection。#include#include#incl
2015-02-07 10:00:51 945
原创 UVa 156 map的使用
背景:主要是学习map相关知识,详见代码我的代码:#include#include#include#include#includeusing namespace std;map map1;mapmap2;vector vector1,ans;string string1_lower(string string1){ for(int i=0;i < stri
2015-02-05 22:03:44 615
原创 UVa 10815
背景:这题只能照着书敲,学习C++的用法,主要学习见对代码的注解。#include#include //流的头文件#include#include //isalpha()的头文件,类似的还有isdigit()#include#includeusing namespace std;set set1;int main(void){ string string1
2015-02-05 14:58:14 665
原创 UVa 101
背景:1Y!!!注意这根据游戏规则,无论怎样放,如果一个堆有元素,那么最底层元素必是初始在这个堆的元素思路:模拟整个过程即可。学习:1.主要是vector容器的一些使用: a.还没有创建的空间不能用,v[]这种c语言的形式访问(就算reserve的预留空间也不行,除非用resize创建空间,否则只能push_back();)
2015-02-04 14:56:27 553
原创 UVa 10474
背景:竟然还wa了一发,没有仔细读题,sort水过。此题代码:#include#include#include#includeusing namespace std;bool cmp(const int &a,const int &b){return a<b;}int main(void){ int n,m,count=1; while(scanf("
2015-02-03 17:56:40 532
原创 UVa 253
背景:一次编译通过加一次ac就是这么爽!!!!!!思路:枚举六个面朝上,每种情况旋转4次的所有情况,一共24种,全部枚举出来比较即可!这里比较巧妙的是把每一种情况都写作一个长度为6的字符串,并在第七位加一个'\0',这样就可以用strcmp来比较了。学习:1.#include#includeint main(void){ char l[7],r[7],temp[13
2015-02-03 11:39:54 729
原创 STL在ACM竞赛中的使用
学习:1.stringstream字符流,和string类型。#include#include#includeusing namespace std;int main(void){ string str; stringstream ss; while(getline(cin,str)){ //getline函数的返回值是其中的流cin。一旦cin读取错误就是f
2015-02-02 02:51:58 1433
原创 Coderforces 509B
背景:开始没有仔细想,后来@liu_jc 说简单遂1Y思路:找出最大堆的鹅卵石数为max,最小堆数为min。如果max-min>=k,则成立。 证明:对最大堆编号为:a1,a2,a3~amin-1,amin~amax .对最小堆编号为:b1,b2~bmin. 让a1和b1,a2和b2,......,amin和bmin颜色一样。
2015-02-01 14:57:50 588
原创 Coderforces 509A
背景:esay学习:1.杨辉三角与组合数与二项式公式: a:二项式公式:,组合数是二项式公式的系数,而杨辉三角是组合数的图形表示。 b:组合数公式:
2015-02-01 14:15:26 574
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人