上一页 1 ··· 22 23 24 25 26 27 28 29 30 ··· 34 下一页
摘要: 这俩道题目的代码基本和pku 3636一样的主要的区别就是第二个元素排序时同样也是递增排序,因为第一个元素相同时,第二个元素按递增顺序可以全部加入,不用重新再增加桶所以后面的一个判断条件也要将等号去掉pku1065#include<iostream>#include<algorithm>using namespace std;struct Node{ int h,w; bool operator<(Node a){ if(a.w==w) return h<a.h; return w<a.w; }}ele[5010];int a[5010];int ma 阅读全文
posted @ 2011-08-11 01:09 枕边梦 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 题型: 贪心思路: 由于一个盒子在考虑放入另一个盒子之前,要考虑两个因素,宽和高,如果我们能够消除一个因素,就在一维的条件下考虑会简单些。怎么才能降低维数呢。因为只有w小于另一个时才能才能考虑是否能放,所以我们就把w从小到大排序,这样大体盒子的先后顺序就有了,我们在比较的时候就不需要考虑宽了,因为只有后边的盒子才能容纳前边的盒子先不考虑w和h相同的情况,排好序后,从第一个盒子开始遍历,第一个盒子不能容纳其他任何的盒子(宽最小),所以直接做为一个桶了。然后第二个,看他能不能容纳第一个,只需考虑h满足要求与否。然后第三个,问题来了,它既能容纳第一个,又能容纳第二个,选择哪一个,贪心就在这,它能刚好 阅读全文
posted @ 2011-08-11 00:19 枕边梦 阅读(305) 评论(0) 推荐(0) 编辑
摘要: 终于还是AC了,可是WA了N多次了呀,唉,忽略了一个要点,就是在广搜的时候,一个点可以不止被通过一次,好郁闷呀,确实如此,看了大牛给的测试例子,通过了这个例子,接着就AC了得再开一个数组记录到达该点的方向主体是用BFS枚举所有可推点的状态,用DFS判断推箱工能否到达箱子的后面看下这个测试例子5 30 0 00 0 00 2 01 4 11 3 1答案是 4#include<iostream>#include<queue>using namespace std;int map[8][8],n,m,ei,ej,a,b,dir[4][2]={{1,0},{-1,0},{0,1 阅读全文
posted @ 2011-08-10 18:44 枕边梦 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 额,简单的DFS#include<iostream>#include<queue>using namespace std;int map[26][26];bool vis[26][26];struct node{ int x; node(int _x=0):x(_x){};};bool bfs(){ queue<node> Q; Q.push(node(1)); while(!Q.empty()) { node t=Q.front(); Q.pop(); for(int i=0;i<26;i++) { if(map[t.x][i]&&i 阅读全文
posted @ 2011-08-10 13:51 枕边梦 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 一个早上了,整整一个早上了,我的天啊,错误是大把大把的可是思路明明很简单,这题是用BFS做的,可是不能紧紧标记一个点是否已经访问过,这样直接WA,因为访问过的不符合条件的点,很可能是因为转了太多的弯,但完全有可能存在转的弯比较少的路径在之后访问该点,所以vis[][]数组是用来保存访问过该点的最少的转弯次数,这样,只要访问该点,该点的转弯次数小于之前访问该店的最小转弯次数,则可以入队我很不明白,我之前有些为什么还会MLE……#include <iostream>#define MAXN 1001#include <queue>using namespace std;in 阅读全文
posted @ 2011-08-10 12:48 枕边梦 阅读(251) 评论(1) 推荐(0) 编辑
摘要: 郁闷死啦,一道简单的DP,搞了好几个小时,结果输出错了,反序了,都怪测试例子是三个数,反序了也不知道呀,也怪自己……………………#include<iostream>#include<string>using namespace std;int p[105],f[105],dp[105],ans[105];bool map[105][105];int main(){ int a,b,n,m,cas,t=0; cin>>cas; while(cas--) { cin>>n; for(int i=1;i<=n;i++) cin>>p[ 阅读全文
posted @ 2011-08-10 00:08 枕边梦 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 一个早上已经过了呀,迷宫问题已经做了好几道了呀,这题居然还要搞半天呀,一开始觉得用DFS直接一点,很好写,可是很果断的超时了,所以还是BFS了之后,题目要求不能回头,但是可能转多个弯之后又回到走过的点,但还是有可能过去的,因为可能是从不同方向移动到这个点,所以,所以用一个三维的数组记录每一个点的状态,每个点有五种状态,没走过,还有从四个方向中的一个方向移动到该点,vis[81][81][5](一开始开小了,直接挂了一次),注意到这一点之后,我想应该就不难A 了,但是敲代码过程中的细节问题还是很多的,具体看代码吧#include<iostream>#include<queue& 阅读全文
posted @ 2011-08-08 13:53 枕边梦 阅读(559) 评论(0) 推荐(0) 编辑
摘要: View Code #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int maxnode = 50; const int maxedge = 2000; struct edge { int start; int end; }; edge ArrayEdge[maxedge]; int degree[maxnode]; int start; int NodeNum, EdgeNum; int anStack[maxedge], pIn 阅读全文
posted @ 2011-08-07 17:33 枕边梦 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 这题目跟hdu2894差不多,只不过求出序列之后要求算出对应第k个长度为n的字段所代表的数字#include<iostream>#include<string>using namespace std;int flag[(1<<15)+1],n,cnt,ans[(1<<15)+1],sum[(1<<15)+1];void dfs(int u){ int t=((u<<1)&((1<<n)-1)); if(!flag[t]) { flag[t]=1; dfs(t); ans[cnt++]=0; } if(! 阅读全文
posted @ 2011-08-07 04:57 枕边梦 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 呵呵,好神奇,题目隐含的意思就是要找出一条欧拉回路先看下这个详细 的解释,欧拉图的应用:计算机鼓轮的设计。设有旋转鼓轮其表面被等分成24个部分,如图7-4.4所示。其中每一部分分别用绝缘体或导体组成,绝缘体部分给出信号0,导体部分给出信号1,在图7-4.4中阴影部分表示导体,空白部分表示绝缘体,根据鼓轮的位置,触点将得到信息1101,如果鼓轮沿顺时针方向旋转一个部分,触点将有信息1010。问鼓轮上16个部分怎样安排导体及绝缘体,才能使鼓轮每旋转一个部分,四个触点能得到一组不同的四位二进制数信息。设有一个八个结点的有向图(图7-4.5),其结点分别记为三位二进制数{000,001,010,011 阅读全文
posted @ 2011-08-06 17:48 枕边梦 阅读(957) 评论(0) 推荐(1) 编辑
上一页 1 ··· 22 23 24 25 26 27 28 29 30 ··· 34 下一页