![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM
baikaishui525
我是一个菜鸟,我会努力的。
展开
-
poj 1753
用位操作+BFS解决.基本思想如下:给棋盘每一个状态赋予一个状态id,id计算方法是将棋盘与数的二进制表示联系起来,如题所给的数据:bwwbbbwbbwwbbwww状态id为6585,计算方法为1*2^0+0*2^1+1*2^2..1*2^12+0*2^13..=6585(其中b代表1,w代表0)在此基础上进行BFS搜索,首先理解一点,先点(转载 2012-08-01 19:58:25 · 972 阅读 · 0 评论 -
grid2754
八皇后问题,是用递归方法,下面的实现方案比较简洁。注意细节,用户的输入是从1开始的。#include #include #include #include using namespace std;int ans[92][8] = {0};int newTry[8] = {0};int count = 0;void getAllAns(int i){ if(i =转载 2012-08-28 14:32:05 · 459 阅读 · 0 评论 -
ooj 1664
poj上递推的题似乎比较少,而递推的题都比较难想。思路是从讨论区里学来的。本题是很简单的递推。①最少的盘子放了一个,这样每个盘子至少一个,n个盘子先放上n个,剩下的m-n个可以随便放②最少的盘子没有放,这样剩下的n-1个盘子还是随便放m个int f(int m,int n){ if(m<0) return 0; if(m==0||n==1) return 1;转载 2012-08-27 07:37:28 · 594 阅读 · 0 评论 -
poj grid 2816
这题没什么好说的,可以借鉴的是读数据的方法。#include int W, H; char z[21][21]; int f(int x, int y){ if(x 0 || x >= W || y 0 || y >= H) // 如果走出矩阵范围 return 0; if(z[x][y] ==转载 2012-08-28 09:22:52 · 496 阅读 · 0 评论 -
poj 3295
写完代码发现WA,无奈之下看了讨论区中的测试数据,觉得自己弱爆了!没理解到底什么是WFF,太急于写代码了!先把错误代码贴出来,提醒我以后一定把题目审清楚再做题!#include #include #include #include #include using namespace std;int p,q,r,s,t;int trans(char tmp){原创 2012-08-27 10:09:43 · 768 阅读 · 0 评论 -
grid2757
初学DP,这个题的最关键的一步转化为把求最长上升序列变为求最后一个数已知的最长上升序列,即求以ak为终点的最长上升序列。#include #include #include #include using namespace std;int main(){ int in[1024]; memset(in,-1,sizeof(in)); int num;原创 2012-08-29 08:45:48 · 405 阅读 · 0 评论 -
poj 2262
sqrt里的参数需要注意类型否则编译错误#include #include #include using namespace std;int isPrime(int m){ for(int i = 2;i { if(m % i == 0) return 0; } retur转载 2012-08-01 10:05:26 · 1661 阅读 · 0 评论 -
poj 2109
http://acm.pku.edu.cn/JudgeOnline/problem?id=2109开始的想法是高精度,想想有点儿小麻烦,忍不住就想看看discuss,然后发现我的数据结构学的不精,基本数据类型的范围不清楚,意识很淡。类型 长度 (bit) 有效数字 绝对值范围float 32 6~7 10^(-37) ~ 10^38double 64 15~16 10^(-307转载 2012-08-04 07:45:50 · 555 阅读 · 0 评论 -
poj 1707
简单的贪心水题想法很简单,对于5*5的先把1*1的全填进去;对于4*4的,先填2*2,再填1*1;对于3*3的,先填2*2,再填1*1。思路很清晰,但细节总是出错,当填完2*2时可能会剩下用来填1*1的。#include #include using namespace std;int main(){ int c1,c2,c3,c4,c5,c6; i原创 2012-08-04 10:16:52 · 735 阅读 · 0 评论 -
poj 2586
这题真讨厌,翻译看了半天没看懂。。。对于每一个月来说,如果盈利则盈利S,如果亏空则亏d。每五个月进行一次统计,共统计八次(1-5月一次,2-6月一次.......)统计的结果是这八次都是亏空。问题:判断全年是否能盈利,如果能则求出最大的盈利。如果不能盈利则输出Deficit5个月统计一次,可能出现亏损的情况如下:1. SSSSD -> SSSSDSSSSDSS原创 2012-08-04 08:31:21 · 741 阅读 · 0 评论 -
poj 3299
这题纯水,但要注意格式化输出读入的细节和考虑问题要全面。原题有原数的用原数。#include #include #include using namespace std;const double e = 2.718281828;double td2h(double t,double d){ return t + (0.5555) * (6.11 * pow(e,原创 2012-08-01 08:57:25 · 935 阅读 · 1 评论 -
poj 3006
//筛法求素数#include #include #include using namespace std;//筛法的自己实现int num[1000000];//0素1合void getPrime(){ memset(num,0,sizeof(num)); num[0] = 1; num[1] = 1; for(int i = 2;i原创 2012-08-01 18:18:43 · 496 阅读 · 0 评论 -
poj 1753
参考的转载的那一篇文章,写的自己的程序。枚举的经典题,每个点都指向16个其他的点,层序遍历,记录每个点在第几层被遍历到即可。要注意位操作的简洁和抽象成图的遍历。要从翻面联想到位运算。#include #include #include #include #include using namespace std;int flipPosition(int id,int po原创 2012-08-02 08:53:14 · 495 阅读 · 0 评论 -
poj 2965
本来觉得和1753非常相似,但总是TLE,不知为何。讨论区里有高效解法,很神!贴过来学习。我的代码:#include #include #include #include #include using namespace std;int table[16] = {1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,163原创 2012-08-02 15:34:19 · 512 阅读 · 0 评论 -
poj 1328
贪心第一题。应该上来先把每个岛屿对应的海岸线范围求好,这样以后就只是加减运算比较方便,否则每次都要算乘方开方。注意无解的情况!不要忘了考虑当currentR >当前点的右界时的情况!最后注意输入要读完再判断是否为-1,其实没读完也可以判断的。。。#include #include #include #include #include #include using namesp原创 2012-08-02 20:20:21 · 509 阅读 · 0 评论 -
poj 2488
这道题是图论深搜的典型题。初做此题,首先觉得应当有一个邻接矩阵,于是花了很大力气将棋盘编号,最后在判断是否邻接的条件处纠结许久。之后的搜索使用了C++的栈结构,没有使用递归(优点),但最后无论时间、代码长度、还是空间都不理想。经过学习网上大牛们的代码后,恍然大悟,原来根本不需要构建邻接矩阵,只能说我学的太死了,完全可以使用二维数组直接模拟马的跳跃,这样判断邻接的问题就没有了。#incl原创 2012-09-18 14:09:20 · 563 阅读 · 0 评论