自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 POJ 1379 模拟退火的起点选择

#include #include #include #include using namespace std;const int maxn = 1010;int T, n, X, Y;struct Point{ double x, y, r; Point() {} Point(double xx, double yy): x(xx), y(yy) {}};Point p

2015-08-24 21:55:04 388

原创 HDU 3644 模拟退火的火候控制

#include #define LL long long#define eps 1e-7#define zero(a) fabs(a)<epsconst int INF = 0x3f3f3f3f;const int N = 20;const double pi = acos(-1.0);int n;using namespace std;struct Point{ d

2015-08-24 11:07:21 523

原创 HDU 5017 模拟退火算法

#include using namespace std;const int MOD = 1E9 + 7;const double eps = 1E-8;int dx[8] = {0, 0, 1, -1, 1, -1, 1, -1};int dy[8] = {1, -1, 0, 0, 1, 1, -1, -1};double a, b, c, d, e, f;double dis(d

2015-08-22 21:32:42 651

原创 HDU 5015 矩阵快速幂

题意:给出矩阵的第0行(233,2333,23333,...)和第0列a1,a2,...an(n解法:看到n这样相当于右图:,红色部分为绿色部分之和,而顶上的绿色部分很好求,左边的绿色部分(最多10个)其实就是:A[1][m-1],A[2][m-1]..A[n][m-1],即对每个1<=i<=n, A[i][m]都可由A[1][m-1],A[2][m-1]..A[n][m-1]

2015-08-21 21:06:10 414

原创 uva 307 剪枝

#include using namespace std;const int maxn = 65;int n, sum, goal, stick[maxn];bool visit[maxn];bool dfs(int now, int index, int cnt){ if (goal * cnt == sum) return 1; for (int i = index ; i <

2015-08-21 10:52:10 360

原创 uva 11214

#include using namespace std;const int maxn = 11;int n, m, t, maxd, kase;bool G[maxn][maxn], vis[4][maxn * 2];bool guard(){ for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) if (G[i]

2015-08-21 09:54:36 607

原创 uva 12113

#include using namespace std;const int maxn = 1 << 9;int edge[9][8] = {{1, 3, 9, 13, 18, 19, 21, 22}};int in[9][4] = {{10, 11, 12, 20}};int bits[10], test[45], G[45], goal, cnt, kase;void init()

2015-08-20 19:50:12 513

原创 uva 808 论坐标的重要性

#include using namespace std;struct Point{ int x, y; Point(int xx = 0, int yy = 0): x(xx), y(yy) {} Point operator-(const Point &p) {return Point(x - p.x, y - p.y);}};Point Getpos(int n){ i

2015-08-19 22:14:35 707

原创 uva 208 双向搜索

#include using namespace std;const int maxn = 22;int u, v, kase, eend, route[maxn], numRoute;bool vis[maxn], used[maxn], G[maxn][maxn];setedge;void bfs(int u){ queueque; que.push(u); while (

2015-08-18 21:35:41 381

原创 uva 1343 IDA*

转载别人的:从小到大依次枚举深度上限maxd。对于每一个深度上限,进行dfs,当递归到maxd时,就要判断是否找到了解,如果找到了,就记录或者输出解。不论是否找到了解,都要开始返回,对于找到了解的情况,可以在函数出口处连续返回。那么如何及时的返回呢?答案就是寻找“估价函数”并“剪枝”。对于本题,可以发现,每次移动最多只能让目标数字多1个,因此可以将min{diff(1),diff(2),d

2015-08-17 21:55:57 443

原创 uva 12325

乍一看题目像是dp,然而数据量很大题意是给你两种物品 价值V1,V2  大小S1,S2 让你用一个大小是C的背包去装 性价比高的物品肯定要优先装入,问题是s1和s2可能都很小,导致枚举数量极大可以有另一种枚举法,s2个物1和s1个物2,体积相等,价值为s2*v1 s1*v2 按照性价比的思路就可以了#include using namespace std;typedef lon

2015-08-17 20:44:46 382

原创 uva 1601 dbfs搜索

#include using namespace std;const int maxn = 16 + 10, maxm = 192 + 10;int cx[] = { -1, 1, 0, 0, 0}, cy[] = {0, 0, -1, 1, 0}, w, h, n, cnt;int id[maxn][maxn], G[maxm][5], st[3], ed[3], edge[maxm],

2015-08-17 09:34:08 505

原创 uva 1354 位运算与搜索

#include using namespace std;const int maxn = (1 << 6);int s, vis[maxn], kase;double w[6], sumw[maxn], r;struct Node{ double l, r; Node(double dl = 0, double dr = 0): l(dl), r(dr) {}};int bi

2015-08-14 10:21:49 384

原创 uva 140 剪枝搜索

#include using namespace std;const int maxn = 10;int id[256], letter[maxn], vis[maxn], edge[maxn][maxn], n, head, P[maxn], bestP[maxn], ans;void map_id_letter(const string &s){ n = 0; for

2015-08-13 20:32:36 317

原创 uva 140 next— primutation()的用法

#include using namespace std;const int maxn = 10;int id[256], letter[maxn], n, head;void map_id_letter(const string &s){ n = 0; for (int c = 'A'; c <= 'Z'; c++) if (s.find(c) != -

2015-08-13 20:26:44 399

原创 uva 129 回溯

#include using namespace std;int n, k, cnt, S[50], L;int dfs(int cur){ if (cnt++ == n) { for (int i = 0; i < cur; i++) { cout << char('A' + S[i]); if ((i + 1) % 64 == 0 && i != cur - 1

2015-08-10 22:06:18 399

原创 uva 524 回溯法

#include using namespace std;int kase, n;const int prim[] = {1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37};int ans[17];bool vis[17];bool is_primf(int x){ for (int i = 0; i < 13; i++) if (x

2015-08-10 21:26:36 365

原创 回溯法——八皇后问题

在写递归枚举程序前,要、、、对、、、 应该对节点数进行粗略的统计;当吧问题分成若干步骤并递归求解时,如果当前步骤没有合法选择,返回上一级调用,这个现象称为回溯#include using namespace std;const int maxn = 100;int tot, C[maxn], n ;void search(int cur){ if (cur == n) {

2015-08-10 20:24:53 364

原创 枚举子集 增量构造法 位向量法 二进制法

#include //增量构造法using namespace std;void print_subset(int n, int *A, int cur){ for (int i = 0; i < cur; i++) cout << A[i] << (i == cur - 1 ? "\n" : " "); int s = cur ? A[cur - 1] + 1 : 0; for

2015-08-10 10:50:59 950

原创 递归 —— 生成排列

#includeusing namespace std;void print_permutation(int n,int *A,int cur){ if(cur==n) for(int i=0; i<n; i++) cout<<A[i]<<(i==n-1?"\n":" "); else for(int i=1; i<=n; i++)

2015-08-09 21:27:32 458

原创 uva 10562 DFS

#includeusing namespace std;const int maxn=210;int n;char buf[maxn][maxn];void dfs(int r,int c){ cout<<buf[r][c]<<'('; if(r+1<n&&buf[r+1][c]=='|') { int i=c; while(i-

2015-08-08 10:36:41 367

原创 uva 10129 dfs

#includeusing namespace std;const int maxm=30;int vis[maxm],son,far,in[maxm],out[maxm],G[maxm][maxm];void dfs(int u){ vis[u]=true; for(int i=0;i<maxm;i++) if(G[u][i]&&!vis[i])

2015-08-07 22:18:48 346

原创 uva 10129 并查集的运用

#includeusing namespace std;const int maxm=30;int pre[maxm],son,far,in[maxm],out[maxm];int ffind(int x){ return pre[x]==x?x:pre[x]=ffind(pre[x]);}void unite(int x,int y){ x=ffind(x);

2015-08-07 21:19:25 414

转载 Dijkstra算法(Dijkstra's algorithm)

迪杰斯特拉算法(Dijkstra’s algorithm)是由荷兰计算机科学家艾兹赫尔·迪杰斯特拉提出。迪杰斯特拉算法使用了广度优先搜索解决非负权有向图的单源最短路径问题,算法最终得到一个最短路径树。该算法常用于路由算法或者作为其他图算法的一个子模块。该算法的输入包含了一个有权重的有向图 G,以及G中的一个来源顶点 S。我们以 V 表示 G 中所有顶点的集合。每一个图中的边,都是两个顶点所

2015-08-07 19:38:50 1941

转载 拓扑排序的bfs算法

第一次看到用BFS写的拓扑排序 相比于DFS要容易理解的多拓扑排序算法思想1、在AOV网络中选一个没有直接前驱的顶点, 并输出之;2、从图中删去该顶点, 同时删去所有它发出的有向边;3、重复以上步骤, 直到◆ 全部顶点均已输出,拓扑有序序列形成,拓扑排序完成;◆ 或者图中还有未输出的顶点,但已跳出处理循环。这说明图中还剩下一些顶点,它们都

2015-08-07 19:36:45 3198

原创 uva 10305 简单拓扑排序

#includeusing namespace std;const int maxn=1100;int c[maxn];bool G[maxn][maxn];int topo[maxn],t,n,m,x,y;bool dfs(int u){ c[u]=-1;//访问标志-1正在访问,1已经访问,0尚未访问 for(int v=0; v<n; v++)

2015-08-07 11:13:30 547

转载 拓扑排序(topological sort)DFS

对上图进行拓扑排序的结果:8->7->2->3->0->6->9->10->11->12->1->5->4使用dfs进行拓扑排序同样摘录一段维基百科上的伪码:L ← Empty list that will contain the sorted nodesS ← Set of all nodes with no outgoing edgesfor each node

2015-08-07 11:12:15 4122

转载 BFS (广度优先搜索)

广度优先搜索算法(Breadth-First-Search),是一种图形搜索算法。简单的说,BFS 是从根节点开始,沿着树(图)的宽度遍历树(图)的节点。如果所有节点均被访问,则算法中止。BFS 同样属于盲目搜索。一般用队列数据结构来辅助实现 BFS 算法。  算法步骤:  1.  首先将根节点放入队列中。  2.  从队列中取出第一个节点,并检验它是否为目标。

2015-08-07 09:51:19 490

转载 DFS(深度优先搜索)

深度优先搜索算法(Depth-First-Search),是搜索算法的一种。它沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。DFS 属于盲目搜索。深度优先搜

2015-08-07 09:48:39 638

转载 for_each()的用法

原型:template Function for_each(InputIterator first, InputIterator last, Function fn){ while (first!=last) { fn (*first); ++first; } return fn; // or, since C++11: return move(fn

2015-08-07 09:44:45 456

原创 uva 1103 dfs

#includeusing namespace std;const int maxn= 210;const int flagnum[6]={1,5,3,2,4,0};const string tochar= "WAKJSD";int n,m,inp,cnt[6],ct,kase=0;char C;bool graph[maxn][maxn],vis[maxn][maxn];void

2015-08-05 21:54:12 290

原创 uva 297 dfs

#includeusing namespace std;const int maxn = 1024;const int maxl = 32;int ans;bool buf[maxl][maxl];void draw(int x1,int y1,int x2,int y2){ char C; cin>>C; if(C=='p') { d

2015-08-04 21:54:12 310

原创 dfs 小甜点 uva839与699

#includeusing namespace std;bool solve(int &W){ int W1,W2,D1,D2; bool b1=1,b2=1; cin>>W1>>D1>>W2>>D2; if(!W1) b1=solve(W1); if(!W2) b2=solve(W2); W=W1+W2; return b1&&b2&

2015-08-04 21:13:52 339

原创 UVA 210

#includeusing namespace std;dequeready,block;int var[26],id[1024],st[5],program,q,kase;string code[1024];bool locked;void run(int i){ int time=q; while(time>0) { string now

2015-08-03 21:53:03 461

转载 离线下载的免费网站

关于离线下载的一些免费的网站按照存储空间的大到小来排序吧(注:都是我自己仍然在用的网站):    1,http://torrific.com/美国的网站,是很好很强大的BT代抓工具,空间貌似是无限大,速度巨快,反正我已经放了十几个G的资源了,但是他与众不同的是,他要求上传的不是种子文件(.torrent格式的)而是存储种子文件的URL; 所以,把你的种子

2015-08-03 20:44:47 780

原创 HDU 1166 树状数组和线段树

树状数组#includeusing namespace std;long long data[50001],s[50001],T[50001];long long lowbit(long long t){ return t&(-t);}long long sum(long long eend){ long long sum=0; while(ee

2015-08-03 19:52:48 342

原创 牡丹江2014网络赛 E zoj—3813 规律与线段树

#include#includeusing namespace std;string inp,str;long long num,a,b,C;const long long MAXN = 1E9+7;void adapt(){ str=inp; b-=a-a%str.size(); a%=str.size(); string tem=str.subs

2015-08-02 09:44:47 453

原创 HDU 2642 二维树状数组

#includeusing namespace std;const int MAX_N = 1005;int tree[MAX_N][MAX_N];bool vis[MAX_N][MAX_N];void Update(int x,int y,int val){ for(int i=x;i<MAX_N;i+=(i&-i)) for(int j=y;j<MAX_N;

2015-08-01 10:56:06 328

转载 树状数组

树状数组在区间求和问题上有大用,其三种复杂度都比线段树要低很多……有关区间求和的问题主要有以下三个模型(以下设A[1..N]为一个长为N的序列,初始值为全0):(1)“改点求段”型,即对于序列A有以下操作:【1】修改操作:将A[x]的值加上c;【2】求和操作:求此时A[l..r]的和。这是最容易的模型,不需要任何辅助数组。树状数组中从x开始不断减lowbit(x)(

2015-08-01 09:57:57 226

原创 POJ-2155 树状数组初学习

#include#includeusing namespace std;const int MAX_N = 1005;int NUM,TEST;int tree[MAX_N][MAX_N];void Getsum(int x,int y){ for(int i=x; i>0; i-=(i&-i)) for(int j=y; j>0; j-=(j&-j))

2015-08-01 09:41:31 288

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除