上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 57 下一页

2011年8月22日

哈希算法之三

摘要: //poj 1200 Crazy Search#include <iostream> //hash#include <string>using namespace std;bool table[20000000];int ans[100],count,curr; //注意有大小写字母char ch[1000000]; //本题中的输入字符串ch相当大,另外,table也要开得很大int main(){ int n,nc,len; memset(ans,-1,sizeof(ans)); scanf("%d%d%s",&n,&nc,ch) 阅读全文

posted @ 2011-08-22 15:03 sysu_mjc 阅读(102) 评论(0) 推荐(0) 编辑

哈希算法之四

摘要: //poj 3007 Organize Your Train part II//题意:给定一个字符串,从任意位置把它切为两半,得到两个子串//定义子串1为s1,子串2为s2,子串1的反串为s3,子串2的反串为s4//现在从s1 s2 s3 s4中任意取出两个串组合,问有多少种不同的组合方法//限制: (1) 串Si不能和其反串组合 (2) Si+Sj与Sj+Si是两种组合方式(但未必是不同的组合方式)#include <iostream> //字符串ELFHash 哈希#include <algorithm>#include<string>using nam 阅读全文

posted @ 2011-08-22 15:03 sysu_mjc 阅读(250) 评论(0) 推荐(0) 编辑

哈希算法之二

摘要: //poj 3349 Snowflake Snow Snowflakes#include<iostream> //哈希函数,拉链法#include<vector>using namespace std;const int mv=99991;int data[100002][6];vector<int> hash[100002];bool same(int a[6],int b[6]) //a[]的下标j总是从0到6,固定a,而b[]的起始下标i从0到6,绕顺时针(向右)和逆时针旋转{ int tag; for(int i=0;i<6;++i) { .. 阅读全文

posted @ 2011-08-22 15:02 sysu_mjc 阅读(191) 评论(0) 推荐(0) 编辑

归并排序

摘要: #include <iostream> //递归using namespace std;int n,list[200],temp[200];void merge_sort(int beg,int end){ if(end==beg) return ; int mid=(beg+end)/2; merge_sort(beg,mid); merge_sort(mid+1,end); int p=beg,q=mid+1,t=beg; while(p<=mid||q<=end) { if(q>end||(p<=... 阅读全文

posted @ 2011-08-22 15:01 sysu_mjc 阅读(180) 评论(0) 推荐(0) 编辑

哈希算法之一

摘要: //poj 2503 Babelfish #include <iostream> //ELFhash函数是对字符串的散列#include <string>using namespace std;#define M 1000000//M如果较小则不能很好地避免冲突,解决冲突需要更多的时间,会TLE,比如200000 当然不能过大,会MLE,比如10000000//M取适合的值,既可以避免hash开得太大,同时又可以减少冲突 string hash[M],res[M];int ELFHash(string str) //ELFhash函数{ int h = 0; ... 阅读全文

posted @ 2011-08-22 15:01 sysu_mjc 阅读(159) 评论(0) 推荐(0) 编辑

二分查找(2)

摘要: //poj 3273 Monthly Expense/*题意:给你天数n,和每天需要花的钱,让你把这些天分成m份(每份都是连续的天),要求每份的和尽量少,输出这个和。一开始二分的上界为n天花费的总和(相当于分成1份),下界为每天花费的最大值(相当于分成n份),然后二分,每次的mid值为(上界 + 下界)/ 2,然后根据mid值遍历n天花费,对花费进行累加,每当超过mid值 份数++,看看这个mid值能把n天分成几份,如果份数大于m,表示mid偏小,下界 = mid + 1,反之小于等于mid,上界 = mid,然后输出最后的mid值即可,复杂度为 O(nlogM)*/#include < 阅读全文

posted @ 2011-08-22 12:26 sysu_mjc 阅读(173) 评论(0) 推荐(0) 编辑

分组背包

摘要: //sicily 1346. 金明的预算方案 //在转移的时候主件有四种转移方法:不加附件,加两附件,加附件一或加附件二#include<iostream> //分组背包问题#include<cstring>using namespace std;struct node{ int v,w;}table[62][10];int n,m,v[62],p[62],q[62],len[62],dp[40000];int main(){ while(cin>>n>>m) { for(int i=1;i<=m;++i) { ... 阅读全文

posted @ 2011-08-22 12:26 sysu_mjc 阅读(166) 评论(0) 推荐(0) 编辑

二分查找(1)

摘要: //sicily 2015. A New Year Gift#include<iostream> //二分答案后贪心验证可行性using namespace std;int n,m,arr[1000];bool verify(int c) //对组数c进行二分{ int p=0; for(int i=0;i<n;++i) p+=min(arr[i],c); //如果arr[i]<c,自然是加上arr[i];若arr[i]>=c,因为一共就c组,所以只能取c if(p>=m*c) //c组,每组 m 条项链,返回1说... 阅读全文

posted @ 2011-08-22 12:25 sysu_mjc 阅读(179) 评论(0) 推荐(0) 编辑

多重背包之七

摘要: //poj 3260 The Fewest Coins/*题意:John带了n种币值Vi的确定数量Ci的硬币,而shopkeeper的硬币无限多.给出T,求John支付的硬币数目加上售货员找零的硬币数目的最小值。如果无法支付T,输出-1 支付时硬币数量有限制,为多重背包问题. 找零时硬币数量无限制,为完全背包问题*/#include<iostream> //多重背包和完全背包using namespace std; int main() { int n,t,euro[110],num[110],dp[30000],maxn; cin>>n>>t; i... 阅读全文

posted @ 2011-08-22 12:24 sysu_mjc 阅读(172) 评论(0) 推荐(0) 编辑

多重背包之五

摘要: #include<iostream> //多重背包,poj 1742 Coins,TLE,可能是卡在常数上using namespace std;int n,m,a[250],c[250],dp[100005],weigh[50000];int main(){ while(scanf("%d%d",&n,&m)&&n) { for(int i=1;i<=n;++i) scanf("%d",&a[i]); int l=1; for(int i=1;i<=n;++i) { ... 阅读全文

posted @ 2011-08-22 12:23 sysu_mjc 阅读(144) 评论(0) 推荐(0) 编辑

上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 57 下一页

导航