2014年4月30日

南阳理工OJ 15 括号匹配

摘要: 思路:动态规划,设dp[i][j]表示第i个字符到第j个字符所需要的最少匹配数,则:(1),如果从第i到j-1个字符中没有一个与第j个字符匹配,那么状态转移方程为 dp[i][j] = dp[i][j-1] + 1 (2),如果在第i到j-1字符中存在与第j个字符匹配的字符(记为k,且把所有满足条件... 阅读全文

posted @ 2014-04-30 18:38 ~Love() 阅读(156) 评论(0) 推荐(0)

POJ 1200 Crazy Search

摘要: 思路:利用Karp-Rabin算法的思想,对每个子串进行Hash,如果Hash值相等则认为这两个子串是相同的(事实上还需要做进一步检查),Karp-Rabin算法的Hash函数有多种形式,但思想都是把字符串映射成一个数字。本题hash函数是把字串转化为NC进制的数(实际上程序中计算结果已经被转换为1... 阅读全文

posted @ 2014-04-30 18:38 ~Love() 阅读(101) 评论(0) 推荐(0)

POJ 1002

摘要: 思路:很坑爹的一道水题么,题目没说字符串有多长,一开始开的长度是30,一直RE。另外如果没有重复的输出的是No duplicates.,注意有句点。。。两种解法:map或者二叉搜索树中序遍历一次,维护一个cnt(记录次数)域。#include#include#include#include#incl... 阅读全文

posted @ 2014-04-30 18:38 ~Love() 阅读(127) 评论(0) 推荐(0)

POJ 1088

摘要: 思路:记忆化搜索 + DP#include#include#include#define MAX 105using namespace std;const int dir[4][2] = {-1, 0, 1, 0, 0, -1, 0, 1};int map[MAX][MAX], vis[MAX][M... 阅读全文

posted @ 2014-04-30 18:37 ~Love() 阅读(98) 评论(0) 推荐(0)

Codeforces 302D

摘要: 思路:最短路,map[i][j] = d*(|x[i]-x[j]| + |y[i]-y[j]|) - add[i]#include#include#include#include#includeusing namespace std;long long int map[105][105],vis[1... 阅读全文

posted @ 2014-04-30 18:37 ~Love() 阅读(119) 评论(0) 推荐(0)

Codeforces 14D

摘要: #include#include#includeusing namespace std;const int MAX = 205;int dep, n, map[MAX][MAX];int dfs(int u, int v){ int max1, max2, path_max; max1 ... 阅读全文

posted @ 2014-04-30 18:37 ~Love() 阅读(107) 评论(0) 推荐(0)

POJ 3009

摘要: #include#include#include#define MAX 30 using namespace std; int map[MAX][MAX]; const int dir[4][2]={-1, 0, 1, 0, 0, -1, 0, 1}; int h, w, ans; void dfs... 阅读全文

posted @ 2014-04-30 18:37 ~Love() 阅读(91) 评论(0) 推荐(0)

POJ 3013

摘要: 思路:ans = 每条边(u,v)*v的子树节点的w = 所有的dist[v]*w[v]之和;#include#include#include#include#define MAX 500005const long long int INF = 100000000000000;using name... 阅读全文

posted @ 2014-04-30 18:37 ~Love() 阅读(121) 评论(0) 推荐(0)

POJ 2570

摘要: 思路:floyd + 位运算。map[i][j]的二进制位前26位表示i到j路径里面字母a-z的存在情况,为1说明该字母存在,为0不存在。#include#include#include#include#define MAX 205using namespace std;string str;int... 阅读全文

posted @ 2014-04-30 18:37 ~Love() 阅读(105) 评论(0) 推荐(0)

POJ 3126

摘要: 思路:BFS,最先找到的必定是最小解。#include#include#include#include#include#include#define MAX 11111using namespace std;int isprime[MAX], pre[MAX];queueq;void Chose_P... 阅读全文

posted @ 2014-04-30 18:37 ~Love() 阅读(106) 评论(0) 推荐(0)

HDU 1061

摘要: #include#includeint a[10];int main(){ int T,n,i,k,temp,b,t; scanf("%d",&T); while(T--) { memset(a,0,sizeof(a)); scanf("%d",&... 阅读全文

posted @ 2014-04-30 18:35 ~Love() 阅读(127) 评论(0) 推荐(0)

HDU 2122

摘要: 思路:prime,考虑重边!!!#include#includeint map[1001][1001],dist[1001];int vis[1001],n;void init1(){ int i,j; for(i = 0;i dist[j]) { ... 阅读全文

posted @ 2014-04-30 18:35 ~Love() 阅读(136) 评论(0) 推荐(0)

HDOJ 1863

摘要: #include#includeint father[105],depth[105];int dist[105],map[101][101];int vis[105],n;void init_B(){ int i; for(i = 1;i depth[y]) fa... 阅读全文

posted @ 2014-04-30 18:35 ~Love() 阅读(86) 评论(0) 推荐(0)

HDU 2682

摘要: 思路:由于题目对能相连的点有限制,必须将这些点处理,能相连的点合并到一个集合中,最后查看是否所有点都在一个集合里,若都在说明是一个连通图,存在最小生成树,否则图不连通,不存在最小花费。#include#include#includeint CityHappy[605],vis[605];int is... 阅读全文

posted @ 2014-04-30 18:35 ~Love() 阅读(131) 评论(0) 推荐(0)

HDOJ 1233

摘要: 思路:入门题,求最小生成树;#include#includeint vis[101],dist[101];int map[101][101];void init(int n){ int i; memset(vis,0,sizeof(vis)); for(i = 1;i > 1;i ... 阅读全文

posted @ 2014-04-30 18:35 ~Love() 阅读(98) 评论(0) 推荐(0)

HDOJ 1879

摘要: 思路:求最小生成树(最小生成树就是权值之和最小的极小连通子图) ,注意将已修过的边的权值置为0;数据结构:由于数据量小,可以用临接矩阵直接存储图#include#includeint vis[101];int price[101];int map[101][101];void init(int n)... 阅读全文

posted @ 2014-04-30 18:35 ~Love() 阅读(100) 评论(0) 推荐(0)

HDU 1881

摘要: 思路:一开始以为rating相同的点就直接比较rp然后建图,后来想想不对,因为这样发现不了冲突。后来一想对于rating相同的点可以不用排序,因为对于这些点,他们的rp必然不相同,也就是说在这些点的内部必然存在唯一的且合理的排序,因此只需将要将这些点合并成一个点即可,需要用到并查集的知识。把所有点按... 阅读全文

posted @ 2014-04-30 18:35 ~Love() 阅读(106) 评论(0) 推荐(0)

HDU 2647

摘要: 思路:拓扑排序#include #include typedef struct { int to; int next; }EdgeNode; EdgeNode Edge[20005]; int head[10005],node[10005]; int cnt,inde... 阅读全文

posted @ 2014-04-30 18:35 ~Love() 阅读(101) 评论(0) 推荐(0)

HDU 3342

摘要: #include#includeint degree[101],vis[101],map[101][101];int main(){ int n,m,a,b,i,j,temp,flag; while(~scanf("%d%d",&n,&m) && n) { memse... 阅读全文

posted @ 2014-04-30 18:35 ~Love() 阅读(103) 评论(0) 推荐(0)

HDU 1285

摘要: #include#includeint degree[505],vis[505],map[501][501];int main(){ int n,m,a,b,i,j,min; while(~scanf("%d%d",&n,&m)) { memset(degree,0,... 阅读全文

posted @ 2014-04-30 18:35 ~Love() 阅读(104) 评论(0) 推荐(0)

HDU 1518

摘要: 思路:从第一个数开始搜索,将其和与边长比对,相等则计数+1,计数达到3的时候说明可以组成,因为剩下那条必与边长相等,搜索过程注意剪枝,若某个数已被加入边长则不能重复计算,应将其标记,另外应在每一层递归时进行判断,看是否满足结束条件,以此来优化时间#include#includeint a[25],v... 阅读全文

posted @ 2014-04-30 18:34 ~Love() 阅读(100) 评论(0) 推荐(0)

POJ 2406

摘要: 思路:由于题目要求的是最大值,因此从n开始向下查找,第一次出现的满足条件的那个数就是最大的,查找就可以结束,如果查找到1是仍未找到合适的值,则为1,就是说不是任何字符串的次方如abcd#include#include#define N 1000001int str_judge(int n,int i... 阅读全文

posted @ 2014-04-30 18:34 ~Love() 阅读(82) 评论(0) 推荐(0)

HDU 1953

摘要: #include#includelong long int euler(long long int n){long long int i,m = (int)sqrt(n+0.5),ans = n;for(i = 2;i 1)ans = ans*(n-1)/n;return ans;}long lon... 阅读全文

posted @ 2014-04-30 18:34 ~Love() 阅读(111) 评论(0) 推荐(0)

HDU 1028

摘要: 思路:一开始拿到这个题目以为是找规律,有递推关系什么的,最后找了好长时间没找到规律,上网查了一下才发现是用母函数做,就是把数的加法和指数乘法的幂的加法联系起来,母函数:G(x)=(1+x+x^2+x^3+x^4+.....)*(1+x^2+x^4+x^6+....)*(1+x^3+x^6+x^9+.... 阅读全文

posted @ 2014-04-30 18:34 ~Love() 阅读(138) 评论(0) 推荐(0)

POJ 2249

摘要: #includelonglong sum;int main(){int k,n,m;while(~scanf("%d%d",&n,&m)&&(n!=0||m!=0)){sum =1;m = m<(n-m)?m:n-m;for(k =1;k <= m;k++)sum =(sum*(n-m+k))/k;... 阅读全文

posted @ 2014-04-30 18:34 ~Love() 阅读(82) 评论(0) 推荐(0)

HDU 2191

摘要: 思路:简单动态规划,多重背包转化成0 1背包问题#include#includeint a[101][2001],rcw[2001],rcp[2001];int max(int x,int y){ return x>y?x:y;}int main(){ int C,i,j,k,pg,n,... 阅读全文

posted @ 2014-04-30 18:34 ~Love() 阅读(84) 评论(0) 推荐(0)

HDU 1272

摘要: 并查集的应用注意是“有且仅有”就要保证最终只有一个集合,且每个点都只有一条路。#includeint father[100005],depth[100005];int a[200005];void init(){ int i; for(i = 1; i depth[y]) ... 阅读全文

posted @ 2014-04-30 18:33 ~Love() 阅读(105) 评论(0) 推荐(0)

导航