1
#include<stdio.h> void minheap(int *n[1000],int size){ int i; while(1){ int flag=1; for(i=1;i<=size;i++){ if(n[i]>n[i*2+1]){int t; t=n[i],n[i]=n[i*2+1],n[i*2+1]=t; flag=0;} if(n[i]>n[i*2]){int t; t=n[i],n[i]=n[i*2],n[i*2]=t; flag=0;} } if(flag) break; } } int main(){ int n[1000],size=0,num,i; for(i=0;i<1000;i++) n[i]=500; char order; while(scanf("%c",&order)!=EOF){ if(order=='a'){ scanf("%d",&num); n[++size]=num; minheap(n,size); printf("The min-heap is of size %d and the current minimum is %d a\n",size,n[1]); }else if(order=='b'){ n[1]=n[size]; n[size]=500; --size; minheap(n,size); printf("The min-heap is of size %d and the current minimum is %d b\n",size,n[1]); }else if(order=='c'){ for(i=1;i<=size;i++) { if(i!=1) printf(" "); printf("%d",n[i]); } }else if(order=='d'){ break; } } return 0; }2
#include<stdio.h> int n[90000],top=0,min=1e9; int search(int s,int sum){ int ns,nsum,i; if(s==top-1||s==top-2) { /* printf("*%d\n",sum)*/; if(sum<=min) min=sum; return 0;} for(i=1;i<=3;i++){ if((s+i)<top){ //printf("i=%d s=%d sum=%d\n",i,s,sum); ns=s+i,nsum=sum+n[s+i]; //printf(" n s=%d sum=%d,top=%d\n",ns,nsum,top); search(ns,nsum); } } return 0; } int main(){ int tmp; while(scanf("%d",&tmp)&&tmp) n[top++]=tmp; //while(scanf("%d",&tmp)!=EOF) n[top++]=tmp; search(0,n[0]); search(1,n[1]); printf("%d\n",min); return 0; }3
#include<stdio.h> #include<string.h> int n,map[5000][5000]={0},time[5000]={0},top=0; int max=0; void search(int mask,int sum,int size){ if(size>=top) return; if(sum>max) max=sum; //printf("mask=%d sum %d size %d\n",mask,sum,size); int i,j; int max=0; for(i=0;i<top;i++){ int ch=-1,max=0; for(j=0;j<top;j++){ if(map[i][j]!=0&&(mask&(1<<j))&&(mask&(1<<i))){ if(time[j]>max) max=time[j],ch=j; } } if(ch!=-1){ mask-=1<<i; mask-=1<<ch; //printf(" (%d,%d) ",i,ch); search(mask,time[ch]+time[i],++size); } } return ; } void task (char t[100]){ //printf("task\n"); int c=0,tt=0,tn=0; while(t[++c]!=','){ tt*=10; tt+=t[c]-'0'; } while(t[++c]){ tn*=10; tn+=t[c]-'0'; } time[tt-1]=tn; top++; //printf("**task=%d time=%d\n",tt,time); } void prec (char p[100]){ //printf("prec\n"); int c=0,tb=0,ta=0; while(p[++c]!=','){ tb*=10; tb+=p[c]-'0'; } c++; while(p[++c]){ ta*=10; ta+=p[c]-'0'; } map[ta-1][tb-1]=1; //printf(" pp %d %d\n",tb,ta); } int main(){ char input[100]; int i,j; while(gets(input)){ if(strcmp(input,"end")==0) break; char left[100],right[100]={0}; int n1=0,n2=0; while(input[n1]!=':') left[n1]=input[n1],n1++; left[n1++]='\0'; while(input[n1]) right[n2++]=input[n1++]; right[n2]='\0'; if(strcmp(left,"Process")==0){ int sum=0,n3=0; while(right[n3]) sum*=10,sum+=right[n3++]-'0'; n=sum; //printf("sum=%d\n",sum); }else if(strcmp(left,"Task")==0){ task(right); }else if(strcmp(left,"Prec")==0){ prec(right); } } /*for(i=0;i<top;i++) printf("%d ",time[i]); printf(" top=%d\n",top); for(i=0;i<top;i++){ for(j=0;j<top;j++) printf("%d ",map[i][j]); puts(""); }*/ int mask=~(~0<<top); search(mask,0,0); printf("%d\n",max); return 0; }4
#include<stdio.h> char ans[100][100]; int top=0; int map[100][100],n,min=1e9; int star,end; int search(int a[n],int p,int size,int mask){ int i,c; mask|=1<<p; a[size++]=p; if(size>=n) return 1; /* printf("p=%d size=%d mark=%d\n",p,size+1,mask); for(i=0;i<size;i++) printf("%d ",a[i]); puts("");*/ if(p==end) { if(size<min){ min=size; top=0; c=0; for(i=0;i<size;i++){ if(i!=0) ans[top][c++]=','; ans[top][c++]=a[i]+'0'; } ans[top++][c]='\0'; }else if(size==min){ c=0; for(i=0;i<size;i++){ if(i!=0) ans[top][c++]=','; ans[top][c++]=a[i]+'0'; } ans[top++][c]='\0'; } /*printf("ans min=%d ",min); for(i=0;i<size;i++) printf("%d ",a[i]); puts("");*/ return 0; } for(i=0;i<n;i++){ if(map[p][i]==1&&(mask&(1<<i))==0) search(a,i,size,mask); } } int main(){ scanf("%d,%d,%d",&n,&star,&end); int i,j; for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&map[i][j]); int a[n]; search(a,star,0,0); for(i=0;i<top;i++) printf("%s\n",ans[i]); return 0; }5
#include<stdio.h> int main(){ while(1){ int n[100],top=0,num; while(scanf("%d",&num)==1){ if(num==-999999) break; n[top++]=num; } int i,j,max=n[0]; for(i=0;i<top;i++){ int r=n[i]; for(j=i+1;j<top;j++){ r*=n[j]; if(r>=max) max=r; } } printf("%d\n",max); } return 0; }
沒有留言:
張貼留言