|
2011年3月18日
摘要:
nlog(n)算法View Code #include<stdio.h>#define MAXN 30009int n,a[MAXN],s[MAXN],t[MAXN];//序列存在s里int lis()//单调不降子序列nlogn算法 { int l,r,mid,len=1; a[1]=s[1]; for(int i=2;i<=n;i++) { l=1,r=len; while(l<=r) { mid=(l+r)>>1;//除2 if(a[mid]<=s[i]) l=mid+1;//不降 else r=mid-1;//二分查找 } a[l]=s[i]; 阅读全文
2011年3月17日
摘要:
n*n的做法dp[j]=max(1,dp[i]+1) if(a[i]<a[j])View Code #include<stdio.h>int a[1009];int dp[1009];int main(){ int n; while(scanf("%d",&n)!=EOF) { int i,j; for(i=1;i<=n;i++) { scanf("%d",&a[i]); dp[i]=1; } for(i=1;i<n;i++) { for(j=i+1;j<=n;j++) { if(a[i]<a[j 阅读全文
摘要:
sqrt(1000000*1000000)数据发生超int处理办法,sqrt(1.0*1000000*1000000)即可prim不超时View Code #include<cmath>#include<stdio.h>#include<iostream>#include<algorithm>using namespace std;#define MAX 0x3fffffffint n,m;struct data{ int x,y;}a[1009];double map[1009][1009];bool use[1009];double dis[ 阅读全文
摘要:
看到 5000*50000有点不敢做了……其实bool数组很快View Code #include<stdio.h>bool f[50009];int a[5009];int main(){ int c,n; while(scanf("%d%d",&c,&n)!=EOF) { int i,j; for(i=1;i<=c;i++) f[i]=0; for(i=1;i<=n;i++) scanf("%d",&a[i]); f[0]=1; for(i=1;i<=n;i++) { for(j=c;j>= 阅读全文
2011年3月16日
摘要:
set统计太方便了View Code #include<iostream>#include<set>using namespace std;struct data{ int x,y;}a[209];int main(){ int n; set<double>set1; while(scanf("%d",&n)!=EOF) { set1.clear(); int i,j; for(i=1;i<=n;i++) { scanf("%d%d",&a[i].x,&a[i].y); } double 阅读全文
摘要:
用贪心做初始i=j=1当i/j>=n/m时:j++反之i++随时记录最接近的值即可View Code #include<stdio.h>double jue(double a){ if(a>0)return a; return -a;}int main(){ int n,m; while(scanf("%d %d",&n,&m)!=EOF) { int ri,rj,i,j; double e=n*1.0/m,t,cha=99999999; i=1; j=1; while(i<=32767&&j<=32767 阅读全文
摘要:
bfs搜索,两次分别从两个出口搜,开数组ste[i][j]时刻记录(更新)点i,j到出口的最短距离最后在ste[i][j]查找最大值……View Code #include<stdio.h>#include<iostream>#include<queue>using namespace std;int map[209][80];int hash[209][80];int ste[209][80];int Max;int p[4][2]={0,-1,-1,0,0,1,1,0};int w,h;struct data{ int tei; int tej; int 阅读全文
2011年3月15日
摘要:
从这里可以发现 只要知道递推方程,就可以把dp的过程用记忆化递归表示出来其实记忆化bfs 记忆化递归 ……只要是计算某种状态后,将其保存下来的过程,都是dp!!!View Code #include<stdio.h>double dp[200][200];double di(int n,int m){ if(dp[n][m]!=-1) return dp[n][m]; if(m==0) return dp[n][m]=0; if(m==1) return dp[n][m]=(n+1)*1.0/2; if(n==0) return dp[n][m]=1.0*di(2,m-2)+1; 阅读全文
摘要:
View Code SELECT snum,sname,ssex,sbirth,dnumFROM s--where snum='S006'WHERE dnum='d02'SELECT score,snumfrom scwhere score>=60 and score<=85SELECT snum,snamefrom swhere sname like '王_'SELECT cnum,score*1.5from scwhere cnum='c01'and score is not nullselect distinct 阅读全文
2011年3月14日
摘要:
http://192.168.7.42/problemDetail.aspx?pid=1477前打表找规律后来对数字是一的进行统计如103对最高位开始统计若为0 ,则不处理若该位为1则总数加上后面的数:加上以1*a[i](相应表中数),03+1若为大于1的数 则乘以该数的最高位(如203 则 加上以2*a[i](相应表中数),再加上03+1,再加上100)再到低位执行直到个位数View Code #include<stdio.h>#include<math.h>int main(){ int a[10]={0,1,20,300,4000,50000,600000,700 阅读全文
|