07 2012 档案

摘要:http://poj.org/problem?id=3767 1 #include<stdio.h> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<queue> 7 #include<set> 8 #include<map> 9 #define Min(a,b) a>b?b:a 10 #define Max(a,b) a>b?a:b 11 #defin 阅读全文
posted @ 2012-07-31 10:28 Szz 阅读(244) 评论(0) 推荐(0) 编辑
摘要:在这求第 k 短路用的是,A*+dij 所谓的A* 是一种启发式搜索,他给搜索选定一定的方向,避免了,无谓的搜索,如何来确定搜索的顺序?..也就是用一个值来表示这个值为f[x]..每次搜索取f[x]最小的拓展...那么这个f[x]=h[x]+g[x]其中这个h[x]就是当前搜索时的代价..如求K段路这个就是前一个点的h[x']+边的长度...而g[x]是一个估价函数..估价函数要小于是对当前点到目标的代价的估计..这个估计必须小于等于实际值~~否则会出错...A*的关键也就是构造g[x]..,我们的dij 算法。最短路是,就是一种 A* 搜索,其中 g[x]=0;而这里要说的求K短路一 阅读全文
posted @ 2012-07-31 09:27 Szz 阅读(1662) 评论(0) 推荐(0) 编辑
摘要:http://lghjx.573114.com/Blog/Html/103D/275536.html下面的不是很清楚 ,这个 比较好。简介: 详情 前参见 国家集训队论文 2007年 胡伯涛 论文题意:求存在一个环路,所有的点权之和/所以的边权之和 最大是多少?http://poj.org/problem?id=3621算法:此题是对01分数规划的应用,那么首先明白01分数规划的思想.01分数规划的思想的描述如下:令c=(c1,c2,…,cn)和d=(d1,d2,…,dn)为n维整数向量,那么一个0-1分数规划问题用公式描述如下:FP:最小化(c1x1+…cnxn)/(d1x1…dnxn)=c 阅读全文
posted @ 2012-07-29 16:56 Szz 阅读(1633) 评论(0) 推荐(0) 编辑
摘要:题解最小度限制生成树 ,详解减:http://wenku.baidu.com/view/70ef0e00eff9aef8941e06db.html 要求最小 k 度生成树,我们可以按照下面的步骤来做:设有度限制的点为 V0 ,V0称为根节点1,把所有与 V0 相连的边删去,图会分成多个子图(假设为 m 个,显然的,如果 m > k,那么问题无解),让他们分别求最小生成树;然后用最小的代价将 m 个最小生成树和 V0 连起来,那我们就得到了一棵关于 V0 的最小 m 度生成树。2,在 m 度生成树中找一个点和 V0 相连(设这条边的权值为 a),会生成一个环,为了满足最小生成树的要求,我们 阅读全文
posted @ 2012-07-28 14:24 Szz 阅读(379) 评论(0) 推荐(0) 编辑
摘要:1009直接贪心。类似于SPFA算法。我们要求损耗最小,也就是剩余最大。对于每个节点,我们记录起当前可以达到的剩余最大电力。和 Dijkstra算法相似,我们这里每次找寻的是尚未标记的拥有最大值的结点,并把这个最大值作为当前结点的最终结果,标记此结点并通过当前结点拓展与之 相连的结点。因为从一个结点传输电力到另一个几点,电力的总量是不会增加的。所以,在以后的贪心过程中,不会更新之前已经标记的结点,因为不可能有更大的 值。这样只要求得最后到达t的最大剩余电力就能得出答案。View Code #include<cstdio>#include<cstring>#include 阅读全文
posted @ 2012-07-26 20:34 Szz 阅读(259) 评论(0) 推荐(0) 编辑
摘要:高精度除法:(利用了 减法)http://poj.grids.cn/practice/2737/原理 : 例如 a=13455 除以 b=3先把 3 增大为 30000不够减 右移一位 变为 3000 这样不断的减直到 不够减 为 1456 则 可知 商的 千位 为 4(因为 3000 是 3 的 1000倍)这样 3000 在右移一位 300依此类推 得到 百位、十位,个位; #include<stdio.h>#include<string.h>const int maxn=300;int a[maxn],b[maxn],c[maxn];char str1[maxn] 阅读全文
posted @ 2012-07-25 21:47 Szz 阅读(233) 评论(0) 推荐(0) 编辑
摘要:题意:给定的三个由'0','1','2','3','?'构成的字符串A,B,C。其中'?'表示该位可能是0,1,2,3,现在如果有三个四进制的数依次是这三个字符串,若有A+B=C,则称[A,B,C]是这三个字符串的一组解,现在给定A,B,C,求解的个数。题解 1:搜索:一开始觉的就是用搜索的办法枚举 a和b的所有情况然后和c比较;这个想法是对的,但怎么实现呢,一开是以为将 a,b分别放到两个数组里 分别搜索,但是 怎么搜啊,两个数组后来想到 ,将a和b 存到一个数组里面,前六位存a 从第七为开始 存 阅读全文
posted @ 2012-07-24 16:44 Szz 阅读(216) 评论(0) 推荐(0) 编辑
摘要:求1~N当中约数个数最多的数”问题的优化2010-04-13 20:56【问题描述】求1~N当中约数个数最多的数,若有多解则输出最小的数。【输入格式】输入文件只有一行。这一行有一个数N(1≤N<10^17)。【输出格式】输出文件只有一行。这一行有一个数,即所求的数。【输入样例】2000【输出样例】1680题目分析:(1)此题最容易想到的是穷举,但是肯定超时。(2)我们可以知道,计算约数的个数和质因数分解有着很大的联系:若Q的质因数分解为:Q=p1^k1*p2^k2*…*pm^km(p1…pm为素数,k1…km≥1),则Q有(k1+1)(k2+1)…(km+1)个约数。但是质因数分解的时间 阅读全文
posted @ 2012-07-24 10:33 Szz 阅读(2665) 评论(0) 推荐(0) 编辑
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4308 题解: 最短路,将p看成一个点 dij()硬是tle 我就奇怪了 最多就5000*5000啊,;最后该的SPFA()1A 。。。。。。。#include<stdio.h>#include<string.h>#include<iostream>#include<vector>using namespace std;#define maxn 5001#define inf 999999#define CL(V,num) memset(V,num,sizeof 阅读全文
posted @ 2012-07-23 08:48 Szz 阅读(281) 评论(0) 推荐(0) 编辑
摘要:http://poj.org/problem?id=1691/* 题解: 将每个矩形看成一个点,点A在点B的上方 则b的入度加1,进行拓扑构图 标记 ,每次搜索时搜入读为零的点 构图时少考虑的一种情况 wa 汗。。。。。。。*/#include<stdio.h>#include<string.h>#define max 999999#define maxn 2000struct node{ int xl,yl,xr,yr; int c;}p[maxn];int map[20][20],in[20],n,ans,vis[20];void build(){ int ... 阅读全文
posted @ 2012-07-21 19:17 Szz 阅读(258) 评论(0) 推荐(0) 编辑
摘要:这道题问的就是将1个串如何变为stringA+stringB的形式,使得stringA是stringB经过映射得到相同的串。映射那步其实没有什么 价值,假设str为原串s经过映射后得到的串,我们可以以str为模式串,以s为原串做一次扩展KMP,得到extend数组,extend[i]表示原 串以第i开始与模式串的前缀的最长匹配。经过O(n)的枚举,我们可以得到,若extend[i]+i=len且i>=extend[i]时,表示 stringB即为该点之前的串,stringA即为该点之前的str串,最后输出即可。#include<stdio.h>#include<stri 阅读全文
posted @ 2012-07-21 09:32 Szz 阅读(533) 评论(0) 推荐(0) 编辑
摘要:题意: 在一条路上 假设小Q一开始在0点,给出道路的长度l和输入的次数k输入有两种形式:1:0 x 表示在x出掉一块蛋糕 2:1 表示要吃蛋糕 ,每一次要吃时,都找距离最近的有蛋糕的点,若左右距离相等,则按前一次的方向,若左右都没有,则在原地不动 #include<stdio.h>#include<iostream>#include<string.h>#include<set>using namespace std;set<int>s;int num[100010];int main(){ int t,l,n,a,b,r,ans,p; 阅读全文
posted @ 2012-07-20 14:14 Szz 阅读(456) 评论(0) 推荐(0) 编辑
摘要:http://poj.org/problem?id=3373详解见:http://blog.csdn.net/lyy289065406/article/details/6698787 /*这道题想了半天越想月觉的麻烦,后来实在是写不出来就,参考了一下别人烦人代码,在这加了数组f[a][b]=c;a 表示位置,b表示余数,c表示剩余的次数,含义是 在a这个位置,余数为b的情况下无论是往较大的数改变,还是娇小的数,在改变此时《=c情况下,找不到满足要求的数*/#include<stdio.h>#include<string.h>int mod[110][10],test[1 阅读全文
posted @ 2012-07-19 09:28 Szz 阅读(259) 评论(0) 推荐(0) 编辑
摘要:题意:给出n物品,每个物品有两个参数,价值v,数目m 求,将这些物品分成两份,这两份的价值差值最小。母函数求解,注意初始化的不同#include<stdio.h>#include<string.h>int v[55],num[55];int a[300000],b[200000];int main(){ int n,i,j,k; while(scanf("%d",&n)!=EOF) { if(n<0)break; int sum=0; for(i=1;i<=n;i++) { scanf("%d%d"... 阅读全文
posted @ 2012-07-18 11:10 Szz 阅读(181) 评论(0) 推荐(0) 编辑
摘要:转自 Tanky Woo母函数(Generating function)详解前段时间写了一篇《背包之01背包、完全背包、多重背包详解》,看到支持的人很多,我不是大牛,只是一个和大家一样学习的人,写这些文章的目的只是为了一是希望让大家学的轻松,二是让自己复习起来更方便。(PS:大家觉得我的文章还过... 阅读全文
posted @ 2012-07-18 10:04 Szz 阅读(610) 评论(2) 推荐(0) 编辑
摘要:鸽巢定理的简单形式 鸽巢原理(抽屉原理):如果有n+1个鸽子要进n个鸽巢,则至少存在一个鸽巢种包含两个或更多的鸽子。看上去是一句“废话”,不过这句”废话“在用来证明一个排列或则某种现象的存在性上相当有魅力!关于鸽巢原理更抽象的表述:• If X has more elements than Y, then f is not one-to-one.• If X and Y have the same number of elements and f is onto, then f is one-to-one.• If X and Y have the same number of elemen. 阅读全文
posted @ 2012-07-17 17:16 Szz 阅读(1248) 评论(0) 推荐(0) 编辑
摘要:1 1 2 http://poj.org/problem?id=1724 3 一开始就直接写了一个DFS,直接TLE,以为用dfs肯定会超,后来看到discuss里有人 4 2 有人用了DFS,所以看了 看,发现进行一些优化,后就可以AC 5 3 优化看代码 6 4 7 5 #include<stdio.h> 8 6 #include<string.h> 9 7 #define maxn 2000010 8 #define max 0x7fffffff11 9 12 10 struct node13 11 {14 12 int d;15 13 ... 阅读全文
posted @ 2012-07-17 15:12 Szz 阅读(163) 评论(0) 推荐(0) 编辑
摘要:1 http://poj.org/problem?id=1724 2 题目大意:单向边最短路问题,但是每条边都有一个费用,要求你的最短路方案的总的花费不能超过限制。 3 4 BFS+优先队列优化 5 因为题目要求的是在给定费用下的最短距离,所以 以距离优先建队列 广搜 6 7 #include<stdio.h> 8 #include<string.h> 9 #include<vector>10 #include<queue>11 using namespace std;12 #define maxn 2000013 #define max 0x7 阅读全文
posted @ 2012-07-17 15:04 Szz 阅读(157) 评论(0) 推荐(0) 编辑
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4248 题解: 给定n种颜色的石头,每种颜色有si颗,同种颜色的石头不区分。问能构成多少种不同的石头序列(不同的序列是指:1.石头数不同;2.石头数相同,至少一个位置的石头颜色不同) dp[ i ][ j ]表示:考虑前i种石头构成的长度为j的序列的个数。 转台转移方程: dp[ i ][ j ] = dp[ i-1 ][ j ]; //未放入第i种颜色的石头 for k := 1 ~ min( j , s[ i ] ) //放入k个第i种颜色的石头 dp[ i ][ j ] ... 阅读全文
posted @ 2012-07-17 10:02 Szz 阅读(346) 评论(0) 推荐(0) 编辑
摘要:1 /* http://poj.org/problem?id=3411 2 题目意思: 3 从a到b有两种付费方式 1:在a之前已经访问了c(不一定是刚访问),付费p;2:a直接到b 付费r; 4 求 1到n 的最小费用(注意有的点可以访问多次) 5 6 解题思路:dfs ,题目的关键是一个点可能被访问多次,一条边也可能被访问多次 7 某一个点是否访问过可以用f[i]标记,f[i]>0表示访问过了 8 其次还有一点很重要的,就是每个城市最多经过3次(网上说的“闸数”)就可以跳出循环了 9 (一开始以为每条边只会访问一次,wa)10 11 */12 #include<stdio.h& 阅读全文
posted @ 2012-07-16 10:25 Szz 阅读(220) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示