2013年7月31日

HDU4631(标程代码)

摘要: 1 /*将x从小到大排序,每次插入一个点,直接找比这个点的x大的第一个,然后从这个开始向两边找 2 ,找点的下标用多重容器实现*/ 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 using namespace std;10 struct point11 {12 __int64 x,y;13 bool operator M;46 for(i=1;i1)//从第二个点开始52 {53 multiset::iterator it=M.lower_bound... 阅读全文

posted @ 2013-07-31 16:22 ok_boy 阅读(204) 评论(0) 推荐(0) 编辑

HDU4628

摘要: 1 /*状态转移f[i]=min(f[i],f[j]+f[i^j]); 2 就是j状态+i^j状态=i状态,f[i]记录的是从i删除1要的最小步数*/ 3 #include 4 #include 5 #include 6 using namespace std; 7 const int N=100010; 8 int f[N]; 9 int n;10 char s[20];11 int min(int a,int b)12 {13 if(an时跳出24 while (r>=0&&(x&(1<<r))==0) r--;25 if (s[l]!=s[r]) 阅读全文

posted @ 2013-07-31 11:42 ok_boy 阅读(422) 评论(0) 推荐(0) 编辑

poj1185

摘要: 1 /*状态压缩就是把一系列用二进制表示的状态压缩成一个十进制数*/ 2 #include 3 #include 4 #include 5 using namespace std; 6 int s[65],dp[150][65][65],cont=0,sum[65],map[150];//m为10根据要求每行最多60中状态 7 bool ok(int x) 8 { 9 if(x&(x0)17 {18 if(x&1) sum++;19 x>>=1;20 }21 return sum;22 }23 void init(int n)//... 阅读全文

posted @ 2013-07-31 09:55 ok_boy 阅读(326) 评论(0) 推荐(0) 编辑

2013年7月30日

HDU4627

摘要: 1 /*找规律,n是奇数那么就是n/2和n/2+1 2 如果n是偶数,那就是两种情况n/2-1,和n/2-2两种,比较一下大小就可以 3 思路来自:http://www.cnblogs.com/freezhan/ 4 */ 5 #include 6 #include 7 __int64 gcd(__int64 a,__int64 b) 8 { 9 if(b==0) return a;10 return gcd(b,a%b);11 }12 __int64 LMC(__int64 a,__int64 b)13 {14 return a/gcd(a,b)*b;15 }16 ... 阅读全文

posted @ 2013-07-30 20:40 ok_boy 阅读(192) 评论(0) 推荐(0) 编辑

最大递增和最大递减求法和方案计数比较异同分析

摘要: 1 /*最大递增和最大递减的分析 2 两个其实是一个道理 3 只是维护和边界需要修改一点 4 在理解的过程中突然有个想法:那就是直接套用最大递增,只是把数列改为原来的反数列,然后边界取负无穷大,然后求 5 这个反数列的最大递增数列就可以了,事实证明,这是可行的 6 */ 7 8 /*最大递增子序列算法**/ 9 #include 10 using namespace std; 11 int find(int *a,int len,int n)//修改后的二分查找,若返回值为x,则a[x]>=n 12 { 13 int left=0,right=len,mi... 阅读全文

posted @ 2013-07-30 00:06 ok_boy 阅读(507) 评论(0) 推荐(0) 编辑

2013年7月29日

poj2533

摘要: 1 /*解题思路请看给分类的最长递增子序列算法解析那篇文章*/ 2 #include 3 #include 4 int find(int *c,int len,int n) 5 { 6 int l=0,r=len; 7 while(ln) r=mid-1;12 else return mid;13 }14 return l;15 }16 int main()17 {18 int i,j,n;19 int a[1005], c[1005],len;20 while(scanf("%d",&n)!=EOF)21 {2... 阅读全文

posted @ 2013-07-29 22:02 ok_boy 阅读(140) 评论(0) 推荐(0) 编辑

最长上升子序列算法解析

摘要: 1 LIS什么是最长递增子序列呢? 2 问题描述如下: 3 设L=是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=, 4 其中k1 16 using namespace std; 17 int main() 18 { 19 int i,j,n,a[100],b[100],max; 20 while(cin>>n) 21 { 22 for(i=0;i>a[i]; 24 b[0]=1;//初始化,以a[0]结尾的最长递增子序列长度为1 25 f... 阅读全文

posted @ 2013-07-29 21:51 ok_boy 阅读(399) 评论(0) 推荐(0) 编辑

poj2092

摘要: 1 /*水题,算每个号码处出现的次数*/ 2 #include 3 #include 4 #include 5 using namespace std; 6 const int maxn=10000+10; 7 struct point 8 { 9 int num,index;10 }p[maxn];11 int cmp(const point a,const point b)12 {13 if(a.num==b.num) return a.indexb.num;15 }16 int hash[maxn];17 int main()18 {19 int i,j,n,m... 阅读全文

posted @ 2013-07-29 20:25 ok_boy 阅读(303) 评论(0) 推荐(0) 编辑

最长公共子序列算法解析

摘要: /*转自网上总结*/一、最长公共子序列(Longest Common Subsequence:LCS)设有两个序列A[1...m]和B[1...n],分别对A和B进行划分子序列A[1] A[1..2] A[1..3] ... A[1..m]B[1] B[1..2] B[1..3] ... B[1..n]依次求出A中的每个子序列(从A[1]开始)与B中每个子序列的最长公共子序列,并记录在数组C[m][n]中,C[i][j]表示A[1..i]和B[1..j]的最长公共子序列的长度。递推公式如下:①C[i][j]=0 i=0 or j=0②C[i][j]=C[i-1][j-1]+1 i!=0 and 阅读全文

posted @ 2013-07-29 18:14 ok_boy 阅读(1133) 评论(0) 推荐(0) 编辑

poj1159

摘要: 1 /*/所要插入的个数是n-输入的序列和他逆序列的最长公共子串长度**/ 2 3 #include 4 #include 5 char a[5010],b[5010]; 6 short int dp[5010][5010];//用int会爆内存 7 int LCS(int n,int m) 8 { 9 int i,j;10 for(i=1;i=dp[i][j-1])19 {20 dp[i][j]=dp[i-1][j];21 // dir[i][j]=0;22 }2... 阅读全文

posted @ 2013-07-29 18:12 ok_boy 阅读(208) 评论(0) 推荐(0) 编辑

导航