- 博客(31)
- 资源 (1)
- 收藏
- 关注
原创 hdu 1078 FatMouse and Cheese
这一题考察的就是记忆化搜索。 #include #include #include #include using namespace std; int map[105][105]; int dp[105][105]; int n,k; int dri[4][2]={1,0,-1,0,0,1,0,-1}; int search(int a,int b) { in
2012-02-13 21:58:37
202
原创 hnu 1078 FatMouse and Cheese
这道题目就是考察的最基本的记忆化搜索。 #include #include #include #include using namespace std; int map[105][105]; int dp[105][105]; int n,k; int dri[4][2]={1,0,-1,0,0,1,0,-1}; int search(int a,int b) {
2012-02-13 21:55:10
123
原创 hdu 1247 Hat’s Words
这一题也是用字典树做,思路比较简单,就是分两部分查找。左边一部分,右边一部分。 这一题最主要的就是要注意结束条件。在Insert时候,要标记Insert单词的最后一个字母,一次来方便后面的search。 #include using namespace std; #define MAX 26 typedef struct Trie { int count;
2011-12-18 20:51:44
276
原创 hdu 1251 统计难题
这是我第一次接触字典树,感觉还不是很不熟悉。这是仿照别人的代码写出来的。 但是我还不是理解,为什么要用 #include #define MAX 26 typedef struct TriNode { int count; struct TriNode *next[MAX]; }TriNode; int t=0; TriNode a[1000000];
2011-12-17 12:23:49
236
原创 hdu 1210 Eddy's 洗牌问题
这一题就是找规律的题目。。 if(t t*=2; else { t=2*(t-n)-1; } #include int main() { int t,n; while(scanf("%d",&n)!=EOF) { int ans=1;
2011-12-10 00:04:16
231
原创 hdu 1028 Ignatius and the Princess III
在正整数n的所有不同划分中,将最大加数n1不大于m的划分个数记为q(n,m)。可以建立q(n,m)的如下递归关系: q(n,m) = 1, n >= 1 当最大加数n1不大于1时,任何正整数n只有一种划分形式,n = 1 + 1 + 1 +...+ 1 q(n,m) = q(n,n), m >= n 最大加数n1实际上不能大于n q(n,n) = 1 + q(n,n - 1) 正整数n
2011-12-07 22:26:59
172
原创 hdu 1019 Least Common Multiple
#include using namespace std; int gcd(int a,int b) { if(b==0) return a; return gcd(b,a%b); } int main() { int ca; scanf("%d",&ca); while(ca--) {
2011-12-03 20:45:16
182
原创 hdu 1005 Number Sequence
这道题目得出:周期为49; #include using namespace std; int a,b; int fun(int n) { if(n==1 || n==2) return 1; return (fun(n-1)*a%7 + fun(n-2)*b%7)%7; } int main() { int n; wh
2011-12-03 20:29:00
182
原创 hdu 2795 Billboard
这一题可以用线段树来做,就是最简单的线段树。 #include using namespace std; #define MAX 200010 int w,fine; struct Node { int r,l,mid,num,max; }node[3*MAX]; int Max(int a,int b) { return a>b?a:b; } void i
2011-11-30 23:12:31
151
原创 hdu 4107 Gangster
解题思路: 这一题与前面做的线段树的题目有所不同的就是这个子节点不一定一致(有可能子节点有节点的num值小于P),这样就不好进行优化,这里引用max,min两个变量用来储存该节点的子节点的最大值和最小值。若max=P,就可以+2*c,这样子节点就可以不用进行+c操作了,这样就可以进行偷懒了。 #include using namespace std; #define INF 20
2011-11-27 11:09:12
185
原创 hdu 1698 just a hook
这道题目就是考察的线段树求和的算法,比较简单。 注意事项: 1、如果一个区间的值都相同,则用cover=value标记; 2、如果区间的值原来都相同,现在要插入一个,则这个区间的cover值就为-1(用来标记这个区间的值不唯一) 3、最后求总和的时候,用count函数求和。 #include using namespace std; struct Nod
2011-11-26 11:34:25
177
原创 hdu 1166
这道题目就是一道简单的线段树题目。与hdu1754很相似。 #include using namespace std; struct Node { int l,r,mid,sum; }node [500000]; void init(int a,int b,int n) { node[n].l=a; node[n].r=b; node[n].mid
2011-11-21 21:55:53
566
原创 hdu 1754
这是一道很基本的线段树题目。 #include using namespace std; struct Node { int l,r,mid,max; }node[600000]; int max(int a,int b) { return a>b?a:b; } void inint(int a,int b,int n) { nod
2011-11-21 20:38:51
1126
原创 hdu 4104 Discount
这道题目是很水的题目。不解释。。。。。 #include #include using namespace std; int cmp(const void*a,const void *b) { int *t1=(int *)a,*t2=(int *)b; return *t1-*t2; } int main() { int n,fine,min,sum;
2011-10-30 23:54:50
536
转载 hdu Squarefree number
#include #include #include #define nmax 1000001 int prime[nmax], plen; void init() { memset(prime, -1, sizeof(prime)); int i, j; for (i = 2; i < nmax; i++) { if (prime[i]) { for (j = i + i; j
2011-10-23 12:05:00
226
原创 poj 2140 Herd Sums
这道题目水题。。。 等差数列求和。分情况讨论,等差数列的长度为1,2,3,4,。。。直到t #include #include using namespace std; int main() { int n; while(cin
2011-10-10 22:15:57
186
原创 hdu Self Numbers
这一题很简单,但是要注意mark数组开的范围应该大于1000000. #include #include using namespace std; bool mark[1010001]; int change(int n) { int ans=0; whil
2011-10-06 16:51:59
168
原创 hdu 1114 Piggy-Bank
这题就是完全背包。 注意要判断背包是否背满。 初始化的时候要用dp[ ]=INF,dp[0]=0;#include #include using namespace std; #define INF 0x7ffffff int dp[10000]; int end; in
2011-09-20 00:00:46
235
原创 hdu 1284 钱币兑换问题
这题主要是运用如下结论: 设标记P(n, m)表示正整数n的所有不同划分中,最大加数不大于m的划分个数。 [ 1 m = 1; P(n, m) = [ P(n, n) n
2011-09-19 21:41:51
413
原创 hdu 1163 Eddy's digital Roots
这道题目只是考察基本的乘法运算:a*b就是将a的每位上的数字同乘以b就是结果。 #include using namespace std; int change(int n) { int ans=0; while(n) { ans+=n
2011-09-19 14:24:57
150
原创 hdu 1162 Eddy's picture
这道题目就是考察的最小生成树。 用prim算法即可轻松解出这道题目。 #include #include #include #include using namespace std; #define MAX 10000000 struct Node { dou
2011-09-18 20:40:28
205
原创 hdu 1106 排序
其实这道题目很简单,只要注意几个地方就行了。 1.5可以连续 2.结束既可以以5结束,也可以不一5结束。 #include #include #include #include using namespace std; int cmp(con
2011-09-18 13:54:49
165
原创 poj 1107 W's Cipher
解题思路: 用三个数组分别储存三个区间的字母出现的位置,再利用数组下标对应关系进行处理。 注意: 这题的n1,n2,n3均可以大于K1,K2,K3,所以要用到T=N1%K1。进行预处理。。。 #include #include #include #
2011-09-11 14:47:44
197
原创 poj 2420 A Star not a Tree?
题意:给你n个点要你求到这n个点的最短距离。 这题可以从由这n个点构成的几何图形的几何中心开始搜索,搜索最小值。 也可以用数学方法,求偏倒,不过过程复杂一点。 #include #include #include #define MAX 1000000000
2011-09-01 11:02:47
172
原创 hdu 1078 FatMouse and Cheese
这题我原来使用暴力,超时了。。 超时代码: #include #include #include int map[102][102],dp[102][102]; int dri[4][2]={{0,-1},{1,0},{0,1},{-1,0}}; int num,k
2011-08-29 16:13:25
250
原创 hdu 1081 To The Max
题意: 求n*n矩阵子矩阵,使他的和最大。 这题是一个最大子序列和的一个变形,我们可以将每个子矩阵的序列表示出来,再求子矩阵序列的最大子序列和。 代码: #include #include #include int n,map[101][101]; int a[10
2011-08-29 11:18:47
203
原创 hdu 1055 Color a Tree
刚开始做这道题目的时候完全没思路,参考了一下别人的代码,还是有一点弄不懂:为什么 node[node[pos].prarent].w=(double)node[node[pos].prarent].c/node[node[pos].prarent].t;???有哪位大牛能帮忙解
2011-08-26 16:13:31
727
原创 hdu 1041 Computer Transformation
其实这道题目就是考查大数的乘法和加减法而已。。。 这道题目的规律可以找出来: if(n&1) { a[n]=2*a[n-1]-1; } else a[n]=2*a[n-1]+1; 我的ac代码: #include #include #include
2011-08-24 18:47:03
442
原创 hdu 1035 Robot Motion
这题其实很简单,但是我还是花了很长的时间,原因在于我没有考虑一种特殊的情况:从开始位置出发,再回到出发位置。。。 所以dfs开始的时候要从1开始,而不是0.。。。 #include #include #include char map[15][15]; i
2011-08-24 12:06:12
213
转载 hdu 3555 Bomb
典型的数位dp,也是最简单的数位dp,为了弄懂什么事s数位dp我真的纠结了很久,终于让我弄明白了一点了,只是有一点眉目。这两天下来,我发现其实数位dp用dfs实现的代码其实就是一个模板,只要弄懂模板就可以解决大部分问题了。(这要读者自己去慢慢体会。。。)最重要的dp数组中(dfs
2011-08-23 22:37:19
89
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅