2013年2月25日

hdu 2553 N皇后问题(有点坑爹的深搜题dfs)

摘要: 题意:就是问任意两个点之间不在同一行、不在同一列、两点的连线不能与正方形的边成45度角总共有多少种方法。思路:一般的深搜题,但要注意两点的连线不能与正方形的边成45度角,坑爹的是用深搜编出来之后我提交了竟然是超时,后来想想完全可以打表啊!!代码实现:超时代码,用的是基本的深搜,能够得出结果,用于后面的打表#include<stdio.h>#include<string.h>int sum,n,visited[15],flag1[25],flag2[25];void dfs(int i,int num){ int j; if(num==n) sum++; else... 阅读全文

posted @ 2013-02-25 22:02 后端bug开发工程师 阅读(1146) 评论(0) 推荐(0) 编辑

2013年2月4日

hdu 1258(dfs)

摘要: 题意:首先给你一个t,然后是n,后面输入n个数(是非递增顺序的,亲~要注意一下哦),然后让你求的是n个数中和为t的序列总共有多少种,把他们按从左到右的顺序输出来。思路:深搜思想,最重要的是如何避免重复的序列(详见代码)代码实现:#include<iostream>#include<cstring>using namespace std;int sum,n,a[20],b[20],s,flag;void dfs(int f,int num)//深搜{ int i,visited[101]; if(s==sum) //满足题意就输出来 { flag=0; ... 阅读全文

posted @ 2013-02-04 13:34 后端bug开发工程师 阅读(285) 评论(1) 推荐(0) 编辑

hdu 1016(一道经典的dfs)

摘要: 题意:很容易理解,就是让你输出满足相邻的相加是素数的序列(注意不要重复)思路就是深搜思想把每种情况遍历一次代码实现:#include<stdio.h>#include<string.h>int prime[40]={0,1,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0},n;//素数打表,因为n最大是20,所以只要打到40int visited[21],a[21];void dfs(int num)//深搜{ int i; if(num==n&&pr 阅读全文

posted @ 2013-02-04 13:13 后端bug开发工程师 阅读(7165) 评论(0) 推荐(0) 编辑

2013年1月19日

hdu 4339 Query 一道挺好的树状数组题(树状数组+二分思想)

摘要: 题意:首先给了两个字符串,然后有两种类型的操作,第一种:1 a i c 你应该把第i个字符串的第a个字符变成c;第二种:2 i 就是问你从第i个字符开始两个字符串连续的最长的相等长度。思路:利用树状数组更新和求和,对于第二种操作就是利用二分求得的连续最长的长度。代码实现:#include<iostream>#include<cstring>using namespace std;char str1[1000001],str2[1000001];int a[1000001],len1,len2;int lowbit(int x){ return x&(-x);}v 阅读全文

posted @ 2013-01-19 22:29 后端bug开发工程师 阅读(358) 评论(0) 推荐(0) 编辑

hdu 4148 Length of S(n) (坑爹的规律题)

摘要: 题意不明确就是让你根据前面的几个式子来找规律,找了我足足两个小时啊!!有点坑!!S(1)=1,S(2)=11,由S(1)从左往右1个1,所以为11;S(3)=21,由S(2)从左往右2个1所以为21;S(4)=1211,有S(3)从左往右1个2,1个1,所以为1211;S(5)=111221,同理1个1,1个2,2个1,所以为111221S(6)=312211,同理为3个1,2个2,1个1,所以为312211知道规律了题目就容易解决了!!代码实现:#include<stdio.h>#include<string.h>int main(){ char a[31][1000 阅读全文

posted @ 2013-01-19 22:11 后端bug开发工程师 阅读(642) 评论(0) 推荐(0) 编辑

2013年1月18日

hdu 3397 Sequence operation(线段树的延迟标记)

摘要: 做这道题之前建议先做:hdu 3911是这道题的一部分,这是我的博客链接:http://www.cnblogs.com/jiangjing/archive/2013/01/16/2863266.html题意:首先给出一组数据:由0和1组成,然后有5种操作,0 a b表示把[a,b]区间的数全部变成0;1 a b表示把[a,b]区间的数全部变成1;2 a b表示把[a,b]区间的0变成1、1变成0,也就是进行异或操作;3 a b就是问你[a,b]区间总共有多少个1,;4 a b就是问你[a,b]区间最长的连续的1的个数。代码实现:#include<iostream>using nam 阅读全文

posted @ 2013-01-18 13:01 后端bug开发工程师 阅读(980) 评论(0) 推荐(0) 编辑

hdu 1267 下沙的沙子有几粒?(二维递推题)

摘要: 题意:就是给你m个H和n个D,然后从左开始数H的累积个数总是不比D的累计数少的排列有多少种举一个测试案例吧:3个H和1个D总共有3种排列,依次是:H D H H,H H D H,H H H D三种排列,亲~意思应该懂了吧?!呵呵。。。思路:递推公式为:a[m][n]=a[m-1][n]+a[m][n-1];然后当n=0的时候无论m取何值都是1,递推公式怎么推来的呢?我现在说下我的思路吧!假设3个H和2个D是由2个H和2个D还有3个H一个D推来的,2个H和2个D总共有H D H D,H H D D两种排列,3个H和一个D总共有H D H H,H H D H,H H H D三种排列,然后在H D 阅读全文

posted @ 2013-01-18 12:17 后端bug开发工程师 阅读(1855) 评论(0) 推荐(1) 编辑

hdu 1133 Buy the Ticket(递推+精度精算)

摘要: 做这道题之前可以先做:hdu 1267(递推方法和这道题是一样的知识没有精度计算)这是我的博客链接接:http://www.cnblogs.com/jiangjing/archive/2013/01/18/2866168.html题意:就是去买票,票价是50元一张,卖票的没有零钱找的,然后买票的只有50元和100元的,题意给出m个人拿了50元n个人拿了100元问总共有多少种买票顺序(不同的人也算)在hdu 1267里我已经讲了递推方法,我在这里就不纠结了,只要乘以m!n!就可以了代码实现:#include<stdio.h>#include<string.h>int a[ 阅读全文

posted @ 2013-01-18 12:17 后端bug开发工程师 阅读(1594) 评论(0) 推荐(1) 编辑

2013年1月16日

hdu 3911 Black And White(线段树的延迟标记法)

摘要: 题意:就是给你一段由0和1组成的序列,然后有两种操作:0 a b就是问从a到b最长的连续的1的长度为多少,1 a b就是把从a到b的数据是一的更新为0,是零的更新为1.思路:用一个结构体,lone表示从最左边数连续1的长度,lzero表示从左边数连续0的长度,rone表示从右边数连续1的长度,rzero表示从右边数连续0的长度,tmax0表示连续最长的0的个数,tmax1表示连续最长的1的个数,flag用来做延迟标记,具体的东西见代码。代码实现:#include<iostream>using namespace std;struct node{ int lone,lzero; in 阅读全文

posted @ 2013-01-16 19:35 后端bug开发工程师 阅读(1122) 评论(0) 推荐(0) 编辑

如何建立一棵哈夫曼树并且输出压缩码

摘要: 算法:1、给定一个具有n个权值{ w1,w2,………wn }的结点的集合 F = { T1,T2,………Tn } 2、 初始时,设集合 A = F。 3、 执行 i = 1 至 n -1 的循环,在每次循环时执行以下操作 从当前集合中选取权值最小、次最小的两个结点,以这两个结点作为内部结点 bi 的左右儿子,bi 的权值为其左右儿子权值之和。 在集合中去除这两个权值最小、次最小的结点,并将内部结点bI 加入其中。这样,在集合A中,结点个数便减少了一个。 这样,在经过了n-1 次循环之后,集合A中只剩下了一个结点,这个结点就是根结点。哈夫曼树的存储:在哈夫曼树中,每个要编码的元素是一个叶结点(度 阅读全文

posted @ 2013-01-16 15:18 后端bug开发工程师 阅读(3036) 评论(0) 推荐(0) 编辑

导航