2011年8月22日

冒泡排序

摘要: #include<iostream>using namespace std;const int Maxsize=10;int list[Maxsize];void bubblesort(int list[],int n){ int i,j,tag=1,x; for(i=n-1;i>0&&tag;i--) { tag=0; for(j=0;j<i;j++) if(list[j]>list[j+1]) { x=list[j];list[j]=list[j+1];list[j+1]... 阅读全文

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

快排之二

摘要: #include <iostream>using namespace std;struct node { int index; int num;}list[100000];void QuickSort(int beg,int end){ if(beg<end) { int low=beg,high=end; node pivot=list[beg]; while(low < high) { while(low<high && list[high].num>=pivot.num) ... 阅读全文

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

快排之三

摘要: #include<iostream>#include<time.h>using namespace std;//递归实现快排void QuickSort(int pData[],int left,int right){ int i=left,j=right,key=pData[left]; do { while(i<j&&pData[j]>key) j--; if(i<j) { pData[i]=pData[j]; i++; } while... 阅读全文

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

快排之一

摘要: //递归实现快排#include <iostream>using namespace std;int arr[1000];int part(int beg, int end){ int low=beg,high=end; int pivot=arr[beg]; while(low<high) { while(low<high && arr[high]>=pivot) --high; arr[low]=arr[high]; while(low<high && arr[low]<=pivot) ... 阅读全文

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

简单选择排序

摘要: #include<iostream>using namespace std;void main(){ int n;cin>>n; int i,j,min,list[100],t; for(i=0;i<n;i++) cin>>list[i]; for(i=0;i<n-1;i++) { min=i; for(j=i+1;j<n;j++) if(list[j]<list[min])min=j; //找出最小值 t=list[i];list[i]=list[min];lis... 阅读全文

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

基数排序

摘要: #include <iostream>using namespace std;int maxbit(int data[],int n) //求数据的最大位数{ int i,p,max=0; int *temp;temp=new int[n]; for(i=0;i<n;i++)temp[i]=data[i]; for(i=0;i<n;i++) { p=1; while(temp[i]/10>0) { p++;temp[i]=temp[i]/10; } if(p>... 阅读全文

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

回溯

摘要: #include <iostream> //sicily 1152. 简单的马周游问题#include<stdio.h>using namespace std;int vis[10][10],path[100],rear;int arr[8][2]={{-1,-2},{-2,-1},{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2}};void backtrace(int s,int t){ int m,n; for(int i=0;i<8;++i) { m=s+arr[i][0];n=t+arr[i][1]; ... 阅读全文

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

哈希算法之三

摘要: //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) 编辑

多重背包之六

摘要: #include<iostream> //poj 2392 Space Elevator #include<algorithm>using namespace std;int dp[50000];struct node{ int h,a,c; bool operator<(const node& o) { return a<o.a; }}ans[405];int k;int main(){ cin>>k; for(int i=0;i<k;++i) cin>>ans[i].h>>ans[i].a>> 阅读全文

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

多重背包之三

摘要: #include<iostream> //POJ 1276 Cash Machine,参照poj 1742 Coins 1040K 16MS using namespace std;int cash,n,ni[15],di[15],b[100005][2]; //b的定义参照poj 1742int main(){ while(cin>>cash>>n) { for(int i=1;i<=n;++i) cin>>ni[i]>>di[i]; if(cash==0||n==0) { ... 阅读全文

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

多重背包之四

摘要: #include<iostream> //poj 1742 Coinsusing namespace std;int v[105],c[105],b[100005][2]; int main(){ int n,m,i,j,count,num; while(scanf("%d%d",&n,&m),n&&m) { memset(b,0,sizeof(b)); for(i=1;i<=n;i++) scanf("%d",&v[i]); for(i=1;i<=n;i++) ... 阅读全文

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

导航