摘要: 做了个水题,发现自己还是很水,做个整理,以后多加注意!#include <iostream>#include <algorithm>#include <stdlib.h>#include <stdio.h>using namespace std;const int Max=10000000;typedef struct node{ double sum; int res;}Node;Node des[Max];int ans[Max];int cmp(const void* s,const void *t){ if( ((Node*)t)-> 阅读全文
posted @ 2012-04-04 14:36 orangeblog 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 刚刚开始接触c#,写个博客就当复习了; 从前听说c#是MS对c++的改良,目前还没感觉到,不过二者挺像倒是真的;数组:(当数组被定义为类成员时,初始化与定义要分开) 一维数组:int[] a; a=new int[n] {}; 二维数组:int[,]a; a=new int[m,n] {{},{}}; n维数组: int[,,,....,,]a; 锯齿数组:数组元素是一个一维数组,每个元素(一维数组)的长度可以不同,增加了多维数组的灵活性; int [][]a=new int[2][]; a[0]=new int[m];//每个元素都必须初始化a[1]=new int[m];访问限定符: pu 阅读全文
posted @ 2012-04-02 21:46 orangeblog 阅读(201) 评论(0) 推荐(0) 编辑
摘要: http://acm.ccucomp.cn/acmhome/problemdetail.do?&method=showdetail&id=1100下面代码错了!!!!只是在学校oj上面ac了#include <iostream>#include <math.h>using namespace std;typedef struct node{ int pre; int next; int v;}Lan;Lan lan[50001];int Find(int n){ int f; f=n; while(f!=lan[f].v) f=lan[f].v... 阅读全文
posted @ 2012-03-31 14:14 orangeblog 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 搜索加记录平方数众所周知,一个正整数可以分成若干个正整数的和(废话),现在我们把问题改一下。把一个正整数分成若干个平方数的和,显然这也是一定可以达到的。例如8=4+4=2^2+2^2 41=4^2+5^2 3=1+1+1。但是现在试卷空格有限,不可能让你写n个1上去,所以我们需要最少的分拆。#include <iostream>#include <math.h>using namespace std;int base[320];int ans[300];int res[300];int rlen;int len;int back(int n,int temp){ //c 阅读全文
posted @ 2012-03-31 08:57 orangeblog 阅读(278) 评论(0) 推荐(0) 编辑
摘要: 列出了状态转移方程,由于对dp或者是数塔理解不够,程序没实现,网上看了看,是数塔问题,而且是从下往上计算,受益匪浅。 阅读全文
posted @ 2012-03-29 20:13 orangeblog 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 编辑器加载中... 阅读全文
posted @ 2012-03-29 12:36 orangeblog 阅读(99) 评论(0) 推荐(0) 编辑
摘要: 题意:把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。 经典的DP(也可以用递归) 状态转移方程:f[m][n]=f[m-n][n]+f[m][n-1];一定要做好初始化工作;//状态转移方程:f(m,n)=f(m-n,n)+f(m,n-1);#include <iostream>using namespace std;int f[21][21];int main(){ int N; cin>>N; while(N--) { int m,n; cin>>m>... 阅读全文
posted @ 2012-03-28 14:07 orangeblog 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 状态转移方程:f[i]=min(f[x]*2+f[y]*3+f[p]*5+f[q]*7);这题如果不打表超时,不懂为啥?#include<iostream>using namespace std;int f[6000];int min(int a,int b,int c,int d,int *q){ if(a<=b&&a<=c&&a<=d) { *q=1;return a; } else if(b<a&&b<=c&&b<=d) {*q=2;return b;} else if(c&l 阅读全文
posted @ 2012-03-27 16:51 orangeblog 阅读(415) 评论(0) 推荐(0) 编辑
摘要: 从下往上计算;每增加一条直线L,可以把原来的m条直线分成两部分,和L平行的K条,及和L相交的m-k条;此时有0+(k+1)*(m-k)+((m-k)条直线相交的点数),这里用set[i]保存i条直线相交的不同交点数;#include <iostream>#include <set>const int Max=10000;using namespace std;int main(){ int n; set<int> line[Max]; set <int>::iterator it;//it+1 与it++的区别 好像是不能用it+1这种情况; l 阅读全文
posted @ 2012-03-26 19:59 orangeblog 阅读(362) 评论(0) 推荐(0) 编辑
摘要: 编辑器加载中... 阅读全文
posted @ 2012-03-26 17:23 orangeblog 阅读(117) 评论(0) 推荐(0) 编辑