上一页 1 ··· 7 8 9 10 11 12 13 下一页
摘要: 链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114这道题是要找最小的可能值,所以初始化的时候要注意一下不同。完全背包的题,要注意总结这些模版题View Code 1 #include<stdio.h> 2 #include<string.h> 3 #define MAXA 1000000000 4 #define N 10005 5 #define M 505 6 int a[N]; 7 int wei[M]; 8 int val[M]; 9 int min(int a,int b)10 {11 return a<b 阅读全文
posted @ 2012-05-01 16:46 zhenhai 阅读(215) 评论(0) 推荐(0)
摘要: 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602最基本的01背包问题,现在发现需要好好的搞搞基础题了,校赛的一个多重背包竟然没做出来。View Code 1 #include<stdio.h> 2 #include<string.h> 3 #define N 1005 4 int a[N]; 5 int v[N]; 6 int val[N]; 7 int max(int a,int b) 8 { 9 return a>b?a:b;10 }11 int main()12 {13 int t,n,i,j,k,m;14 阅读全文
posted @ 2012-05-01 15:12 zhenhai 阅读(183) 评论(0) 推荐(0)
摘要: 链接:http://poj.org/problem?id=3140这道题是说,给出一棵树,每个节点有一个权值,要求去掉一条边所能获得的两棵树的最小的权值差,其实不能说是dp因为除了最后一步涉及到了取最小之外,其他的地方都是在枚举而已,没有什么状态转移之类的东西存在,只能说是一道简单的树形的搜索View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define N 100005 5 #define M 1000005 6 using namespace std; 7 i 阅读全文
posted @ 2012-04-26 19:11 zhenhai 阅读(185) 评论(0) 推荐(0)
摘要: 链接:http://poj.org/problem?id=1274这道题是简单的二分图匹配问题,匈牙利算法,也是自己的第一道二分图匹配,一直搞不明白匈牙利算法的原理,但是看了程序就有些明白了,看来有的时候不仅仅要去看理论啊,做题也会加深理解的View Code 1 #include<stdio.h> 2 #include<string.h> 3 #define N 205 4 bool map[N][N]; 5 bool used[N]; 6 int match[N]; 7 int n,m; 8 bool dfs(int u) 9 {10 int i,v;11 for( 阅读全文
posted @ 2012-04-24 10:41 zhenhai 阅读(149) 评论(0) 推荐(0)
摘要: 链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1375这是一道矩阵乘法的题,要用到快速矩阵乘法,假设f[i][0]表示第i步到s的种类数,f[i][1]表示到a点的种类数,以此类推f[i][0]=f[i-1][1]+f[i-1][2]+f[i-1][3]……………………数据量很大显然不能用纯粹的递推,递推一般数据较大时都是矩阵乘法,这道题的初始矩阵是[1,0,0,0]即第0步到各个点的走法要乘的矩阵为一个只有对角线全为0,其他皆为1的矩阵View Code 1 #inclu 阅读全文
posted @ 2012-04-22 21:19 zhenhai 阅读(247) 评论(0) 推荐(0)
摘要: 链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1373这道题是给出一些父子关系,并且关系可以传递,要快速确定出来两个点之间的具体的关系是什么,或者是没有关系,这道题要用到深度优先搜索的开始时间和结束时间,具体内容可以参考算法导论,用d[u]表示u节点的开始时间,f[u]表示u节点的结束时间,则如果,d[u]<d[v]<f[v]<f[u]则可以确定v是u的子节点View Code 1 #include<stdio.h> 2 #include< 阅读全文
posted @ 2012-04-22 21:07 zhenhai 阅读(285) 评论(0) 推荐(0)
摘要: 链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1250这道题是求最小逆序数的题,用树状数组和线段树都可以解决,其实最耗费时间的是求原序列的逆序数的部分View Code 1 #include<stdio.h> 2 #include<string.h> 3 #define N 5005 4 int a[N]; 5 int v[N]; 6 int n; 7 int lowbit(int x) 8 { 9 return x&-x;10 }11 in 阅读全文
posted @ 2012-04-20 22:17 zhenhai 阅读(174) 评论(0) 推荐(0)
摘要: 链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1189这道题是用线段树去求区间最大值的一道题,树状数组对于这个数据量已经显得无能为力了,这也说明了树状数组和线段树分别适合的不同的题View Code 1 #include<stdio.h> 2 #include<string.h> 3 #define N 100005 4 int max(int a,int b) 5 { 6 return a>b?a:b; 7 } 8 int n; 9 stru 阅读全文
posted @ 2012-04-20 22:10 zhenhai 阅读(219) 评论(0) 推荐(0)
摘要: 链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1345这道题很明显是一道广搜题,但是搜索的时候相当的麻烦啊,八千多b的代码量,每一行都超长,也确实是自己优化的不够,不过有思路就做了也没想过那么多,只求ac其实很多时候代码长分类仔细速度反而会加快View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<queue> 5 usi 阅读全文
posted @ 2012-04-20 21:56 zhenhai 阅读(331) 评论(0) 推荐(0)
摘要: 链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1360这道题的题意是说,一个图中的点相互连接,但是不同的城市之间的连线的警戒等级是不一样的,由低到高分为a,b,c三级,两个点之间可能有多条路径连接,每条单独的路径的警戒级别是这条路径上的警戒级别最高的那条路的级别,而两个城市之间的警戒级别是所有路径当中警戒级别最低级别,这是一道比较难的并查集的问题,关键就在于是什么时候该用哪一个级别的合并函数将两个点合并,很明显如果a,b两点之间有一条级别为a的路相连,那么b和所有与a相连的 阅读全文
posted @ 2012-04-16 17:23 zhenhai 阅读(220) 评论(0) 推荐(0)
上一页 1 ··· 7 8 9 10 11 12 13 下一页