2011年8月23日

最长公共子序列

摘要: #include<iostream> //poj 2250 Compromise#include<vector>#include<string> using namespace std;vector<string> v1,v2,res;int table[105][105],tag[105][105];int dp(int i,int j){ if(i==-1||j==-1) return 0; if(table[i][j]!=-1) return table[i][j]; else if(v1[i]==v2[j]... 阅读全文

posted @ 2011-08-23 17:19 sysu_mjc 阅读(167) 评论(0) 推荐(0) 编辑

折半插入排序

摘要: #include<iostream>using namespace std;//折半插入排序,关键字的比较次数由于采用了折半查找而减少,但元素的移动次数仍不变const int Maxsize=10;int list[Maxsize];void binasort(int list[],int n){ int i,j,t,low,high,mid; for(i=1;i<n;i++) { t=list[i]; low=0;high=i-1; while(low<=high) { mid=(low+hig... 阅读全文

posted @ 2011-08-23 17:17 sysu_mjc 阅读(197) 评论(0) 推荐(0) 编辑

直接插入排序

摘要: #include <iostream> //直接插入排序using namespace std;void insert_sort(int *x, int n) { int i, j, t; for (i=1; i <n; i++) /*要选择的次数:1~n-1共n-1次*/ { /* 暂存下标为i的数。注意:下标从1开始,原因就是开始时 第一个数即下标为0的数,前面没有任何数,单单一个,认为 它是排好顺序的。 */ t=*(x+i); for (j=i-1; j>=0 && t <*(x+j); j--) /*注意:j=i-1,j--,这里就是下标 阅读全文

posted @ 2011-08-23 17:17 sysu_mjc 阅读(152) 评论(0) 推荐(0) 编辑

希尔排序

摘要: #include<iostream>using namespace std;//当k取1时,就等同于直接插入排序方法,//由于前边大增量的处理,使数组大体有序,因此最后一趟排序移动的记录少,处理速度快void insert_sort(int *x, int n) { int i, j, t,k; k=n/2; while(k>=1) { for (i=k; i <n; i++) { t=*(x+i); for (j=i-k; j>=0 && t <*(x+j); j=j-k) { ... 阅读全文

posted @ 2011-08-23 17:15 sysu_mjc 阅读(122) 评论(0) 推荐(0) 编辑

完全背包之四

摘要: //poj 1252 Euro Efficiency//给出6枚不同面值(在1到100之间)的硬币,通过 加减 凑出1到100的钱数,我们关心的是最少要用到几枚硬币,//最后求出平均值,并找出其中最大值#include<iostream> //完全背包 参考 poj9 3260 The Fewest Coins#include<stdio.h>#include<algorithm>using namespace std; int main() { int cases,euro[10],dp[20000],maxn; cin>>cases; whi 阅读全文

posted @ 2011-08-23 17:13 sysu_mjc 阅读(116) 评论(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-23 17:12 sysu_mjc 阅读(164) 评论(0) 推荐(0) 编辑

完全背包之一

摘要: #include<iostream> //poj 2063 Investmentusing namespace std;int dp[5000000];int main(){ int n,t,d,v,bond[50],interest[50]; cin>>n; while(n--) { cin>>v>>t>>d; for(int i=1;i<=d;++i) { cin>>bond[i]>>interest[i]; bond[i]/=1000; ... 阅读全文

posted @ 2011-08-23 17:11 sysu_mjc 阅读(121) 评论(0) 推荐(0) 编辑

完全背包之二

摘要: //sicily 2014. Dairy Queen#include<iostream> //动态规划,给出几种不同硬币,求组成总值n有多少种方法#include<cstring>using namespace std;int main(){ int n,c,dp[400],w[10]; cin>>n>>c; for(int i=0;i<c;++i) cin>>w[i]; memset(dp,0,sizeof(dp)); dp[0]=1; for(int i=0;i<c;++i) //类似于完全背包问题 ... 阅读全文

posted @ 2011-08-23 17:11 sysu_mjc 阅读(128) 评论(0) 推荐(0) 编辑

统计短文中各字符的频度

摘要: //主要算法,二叉排序树的查找//以出现的各字符构成一棵二叉排序树,针对每一个字符在二叉树中查找,如果找到了就增加计数,否则就插入#include<iostream>#include<string>#include<fstream>using namespace std;typedef char KeyType;struct BstNode { KeyType data; int num; BstNode *lch,*rch;};class BstTree{private: BstNode *root; BstNode* insert(BstNode *t, 阅读全文

posted @ 2011-08-23 17:08 sysu_mjc 阅读(261) 评论(0) 推荐(0) 编辑

随机化算法之三

摘要: #include <iostream> //poj 3318using namespace std;int ma[505][505],mb[505][505],mc[505][505],n;int main(){ scanf("%d",&n); for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) scanf("%d",&ma[i][j]); //cin 会TLE for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) ... 阅读全文

posted @ 2011-08-23 17:07 sysu_mjc 阅读(158) 评论(0) 推荐(0) 编辑

随机化算法之四

摘要: #include<iostream> //随机化算法 poj 2454#include<algorithm>#include<vector>using namespace std;struct node{ int num;int idx; bool operator<(const node& o) { return num<o.num; }}data[200];int ans[200];int main(){ int k; cin>>k; for(int i=1;i<=3*k;++i) { cin>>d... 阅读全文

posted @ 2011-08-23 17:07 sysu_mjc 阅读(122) 评论(0) 推荐(0) 编辑

随机化算法之一

摘要: #include<iostream> //随机化算法,poj 2531using namespace std;int matrix[21][21];int ans[21];int main(){ int n; cin>>n; for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) cin>>matrix[i][j]; int t=200000,r,s,m=0; //WA:随机的次数不够,TLE: 由于每次都随机分配所有点的位置,所以随机次数稍多后就超时。 whi... 阅读全文

posted @ 2011-08-23 17:06 sysu_mjc 阅读(149) 评论(0) 推荐(0) 编辑

随机化算法之二

摘要: #include<iostream> //poj 2531, dfs,实质是利用dfs生成组合数using namespace std;int ans[25],n,matrix[21][21],sum;void dfs(int b){ if(b>n) { int s=0; for(int i=1;i<=n;++i) if(ans[i]==1) for(int j=1;j<=n;++j) if(ans[j]==0) ... 阅读全文

posted @ 2011-08-23 17:06 sysu_mjc 阅读(118) 评论(0) 推荐(0) 编辑

十进制转化为任意进制

摘要: #include<iostream>using namespace std;void decTo(int num,int base){ if(num>0) { decTo(num/base,base); if(num%base>9) cout<<static_cast<char>(num%base+55); else cout<<num%base; }}int main(){ int number,base; cout<<"Enter the number and base:"; cin>> 阅读全文

posted @ 2011-08-23 17:05 sysu_mjc 阅读(158) 评论(0) 推荐(0) 编辑

枚举之二

摘要: //poj 1166 The Clocks#include<iostream> //枚举 264K 297MS #include<string>using namespace std;string str[10]={" ","ABDE","ABC","BCEF","ADG","BDEFH","CFI","DEGH","GHI","EFHI"};int main(){ int 阅读全文

posted @ 2011-08-23 17:03 sysu_mjc 阅读(97) 评论(0) 推荐(0) 编辑

枚举之三

摘要: //sicily 1048. Inverso//由于方格翻转两次就相当没有翻转,所以翻转的次数只可能取0,1,要么没翻,要么翻1次,//这样初始状态为"wwwwwwwww",我们可以计算出每种翻转可能组合的结果,比如翻转 2459 后变成 bbwbwbwbw,那我们可以标记 bbwbwbwbw 的答案为 2459//对于sample中的 bbwbwbwbw ,可以直接输出 2459 .因为 wwwwwwwww 经翻转 2459 后变成 bbwbwbwbw,那么 bbwbwbwbw 再经翻转 2459 后就变成 wwwwwwwww (翻转两次相当于没翻)#include< 阅读全文

posted @ 2011-08-23 17:03 sysu_mjc 阅读(161) 评论(0) 推荐(0) 编辑

枚举之四

摘要: //poj 1166 The Clocks#include<iostream> //枚举+位运算 260K 204MS #include<string>using namespace std;string str[10]={" ","ABDE","ABC","BCEF","ADG","BDEFH","CFI","DEGH","GHI","EFHI"};// A 对应 arr 阅读全文

posted @ 2011-08-23 17:03 sysu_mjc 阅读(175) 评论(0) 推荐(0) 编辑

枚举之一

摘要: //每一个点(i,j)最多做一次翻转,因为翻转两次相当于没有翻转//所以结果可以转化为一个只包含0、1的十六位数组,(1表示翻转)//枚举所有的可能性组合,逐个检验,取包含1最少的串 for(i=1;i<(1<<16);++i)#include<iostream> //poj 2965 枚举,时间 922MS 险过 using namespace std;int table[4][4],tmp[4][4],i,j,k;char ch[4][5];int main(){ int c,num,inf=20,p[16],res[16]; for(i=0;i<... 阅读全文

posted @ 2011-08-23 17:02 sysu_mjc 阅读(164) 评论(0) 推荐(0) 编辑

导航