摘要:
题目大意:就是说两个人交换选一些数,如果a,b被选过了,那么k*a+m*b(k,m >=0 )这样的数就不能再被选择,现在给你一些还没有选的数,问选哪个数可以使你必胜如样例:2 5如果你选2,由于3已经选过了,而2+3=5,所以5也不能备选择。所以选2就为必胜的选择我的思路:,这道题的最初要想到的就是,由于题目的给的数的范围很小,<=20。所以表示这些数的集合就可以用二进制模拟。用一个DP数组就可以存下,他有两个值就是0和1,表示必胜和必输两个状态。详见代码: 1 #include <cstdio> 2 #include <cstring> 3 #inclu 阅读全文
摘要:
是在分类为DP里找的题目,可是解题时。。。。貌似没用到=.=!水过:用数组d[401]记录每个房间前的走廊被用过多少次,则答案即为d[i]*10;每扫描一个点将数组这个范围内的值加1,注意,范围的确定,若下限为偶数,则下限需减一,若上限为奇数,则上限需加1,例如,s=4,t=7时,房间4到房间7之间的走廊都要占用,而房间4前的走廊与房间3之间的走廊是一样的,房间7与房间8之间的走廊也是一样的,所以要扩大数组的更新范围为[3,8]。 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 阅读全文
摘要:
DescriptionGiven a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-array of size 1*1 or greater located within the whole array. The sum of a rectangle is the sum of all the elements in that rectangle. In this problem the sub-rectangle with the largest s 阅读全文
摘要:
分类是DP,可是却用暴力枚举过了,继续找思路。。。下面是纯暴力: 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <iostream> 5 #define MAX(a,b) (a) > (b)? (a):(b) 6 #define MIN(a,b) (a) < (b)? (a):(b) 7 #define mem(a) mem(a,0,sizeof(a)) 8 #define INF 1000000007 9 #define MAXN 阅读全文
摘要:
转自百度文库http://wenku.baidu.com/view/98287f0c844769eae009edf9.html[1]POJ动态规划题目列表容易:1018,1050,1083,1088,1125,1143,1157,1163,1178,1179,1189,1208,1276,1322,1414,1456,1458,1609,1644,1664,1690,1699,1740(博弈),1742,1887,1926(马尔科夫矩阵,求平衡),1936,1952,1953,1958,1959,1962,1975,1989,2018,2029,2039,2063,2081,2082,2181 阅读全文
摘要:
空间里有n个点P0,P1,P2... ...,Pn-1,你的任务是把他们配成n/2对(n是偶数),使得每个点恰好在一个点对中。所有点的距离之和应该尽量小。n<=20. 定义状态d[i][S]为前i个点中,位于集合S的元素两两配对的最小距离,则状态转移方程就是 d(i,S) = min{|Pi,Pj| + d(i-1, S-{i}-{j})}其中|PiPj|表示两点之间的距离。边界是d(-1,S) = 0代码实现: 1 for(int i = 0;i < n;i ++ ) 2 { 3 for(int S = 0; S < (1<<n); S ++ ) 4 ... 阅读全文
摘要:
这道题比1232多了一个条件就是距离,也就是边的权值,建议参考Kruskal算法http://baike.baidu.com/view/247951.htm思想就是以前做题所用的贪心思想附代码: 1 #include<stdio.h> 2 #include<string.h> 3 #include <algorithm> 4 #define max(a,b) (a)>(b)?(a):(b) 5 #define min(a,b) (a)<(b)?(a):(b) 6 using namespace std; 7 8 const int MAXN=10 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1232有n个城市,现在已经有了k条路,求最少还要多少条路可以让他们全部链接起来算法核心:并查集,吧可以连通的连在一起,最后求共有几个大块先做预处理P[i]=i;然后就是 1 int find(int x) 2 { 3 return x==p[x]?x:find(p[x]); 4 } 5 void merg(int x,int y) 6 { 7 int a=find(x); 8 int b=find(y); 9 if(a!=b)10 {11 p[a]=b;... 阅读全文
摘要:
Gold Balanced LineupTime Limit: 2000MSMemory Limit: 65536KTotal Submissions: 10360Accepted: 3086DescriptionFarmer John's N cows (1 ≤ N ≤ 100,000) share many similarities. In fact, FJ has been able to narrow down the list of features shared by his cows to a list of only K different features (1 ≤ 阅读全文
摘要:
http://poj.org/problem?id=2002DescriptionA square is a 4-sided polygon whose sides have equal length and adjacent sides form 90-degree angles. It is also a polygon such that rotating about its centre by 90 degrees gives the same polygon. It is not the only polygon with the latter property, however, 阅读全文
摘要:
http://poj.org/problem?id=1200题目大意就是将一个字符串分成长度为N的字串。且不同的字符不会超过NC个。问总共有多少个不同的子串。最初看了半天一直没看明白与哈希有什么关系(相信也有人和这个菜鸟我一样吧),无奈之下只好去搜结题报告,突然才明白原来那个NC作用大大。最后采用的办法就是以nc作为进制,把一个子串化为这个进制下的数,再用哈希判断。由于题目说长度不会超过16,000,000 所以哈希长度就设为16000000就行。另外为每一个字符对应一个整数,来方便转化。如题目中的daababac与整数对应之后就是12232324然后子串daa->122->011 阅读全文
摘要:
哈希函数的构造方法本文阐述了哈希函数的构造方法有很多,但应注意两个原则:第一,函数值应在1至记录总数之间;第二,尽可能避免冲突。设要存放的数据元素有n个,存放数据元素的内存单元有m个,设计哈希函数的目标就是要使通过哈希函数得到的n个数据元素的哈希地址尽可能均匀地分布在m个连续内存单元上,同时使计算过程尽可能简单以达到尽可能高的时间效率。引言构造哈希函数的方法很多。如何构造一个“好”的哈希函数是很强的技术性和实践性问题,这里的“好”指的是哈希函数构造比较简单,并且用此哈希函数产生的映射所发生的冲突可能性最小,换句话说一个好的哈希函数能将给定数据集合均匀地映射到给定的地址区间中。Hash的原意是“ 阅读全文
摘要:
一个n*m的矩阵由n行m列共n*m排列而成。两个矩阵A和B可以相乘当且仅当A的列数等于B的行数。一个n*m的矩阵乘m*p的矩阵,运算量为n*m*p。 矩阵乘法不满足分配律,但满足结合律。因此A*B*C既可以按顺序(A*B)*C也可以按A*(B*C)来进行。假设A、B、C分别是2*3、3*4、4*5的,则(A*B)*C运算量是2*3*4+2*4*5=64,A*(B*C)的运算量是3*4*5*2*3*5=90.显然第一种顺序节省运算量。 给出n个矩阵组成的序列,设计一种方法把他们依次乘起来,使得总的运算量尽量小。假设第i个矩阵A[i]是P[i-1]*P[i]的。输入32 3 4 5输... 阅读全文
摘要:
链接http://poj.org/problem?id=2785继续上一篇的思路做的,结果。。。第一次MAXN=1000007超时第二次MAXN=10000007 Time 8063 Ms Memory 164760 K 险过,=.=!先附上代码,再寻求其他方法吧 1 #include<cstdio> 2 #include<cstring> 3 #define mem(a) memset(a,0,sizeof(a)) 4 #define MAXN 10000007 5 #define maxn 16000000 6 int hash[MAXN+5],next[maxn+ 阅读全文
摘要:
地址链接http://poj.org/problem?id=1840a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0等价于 a1x13+ a2x23+ a3x33=a4x43+ a5x33所以使用哈希储存前三项的值,而数组开到101^3=1030301就够了有几个需要注意的地方就是x不能等于0(应为这个我纠结了好久,所以看题啊啊~~);然后就是求解的个数,所以在用哈希存前三个数的和时,就不能完全(直接将其替代),那样将会丢掉一种解,所以我的方法就是直接在sum数组中存101^3个数,在搜索的时候一条哈希值相等的链就要搜到尾,找出共有多少个(其实也可以用个数组记录到目前为止 阅读全文