Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
我是用搜索作的,下面是源代码。In Reply To:呵呵,你用什么方法做的 Posted by:hawk at 2003-09-10 21:41:42 #include<iostream> #include<memory> #include<algorithm> #include<cstdio> using namespace std; int stamp[30]; int test[30]; int best[30]; int type; int value; int testval; int savetype; int num; int cmp(const void *arg1,const void *arg2) { return *(int *)arg1-*(int *)arg2; } bool tie; void isbetter() { if(type>savetype||(type==savetype&&num<best[0])) { tie=false; savetype=type; best[0]=num; memcpy(best+1,test+1,sizeof(int)*25); } else if(type==savetype&&num==best[0]) { int i; int j; for(i=stamp[0];i>=1;i--) { if(test[i]!=0) break; } for(j=stamp[0];j>=1;j--) { if(best[j]!=0) break; } if(i>j) { tie=false; savetype=type; best[0]=num; memcpy(best+1,test+1,sizeof(int)*25); } else if(i==j) tie=true; } } void backtrack(int i) { int j; if(i>stamp[0]) return ; // if(testval==value&&value!=0) { isbetter(); return ; } // for(j=1;j<=4-num;j++) { if(j==1) type++; num+=j; test[i]=j; int temp=j*stamp[i]; testval+=temp; if(num>4||testval>value) { testval-=temp; num-=j; break; } if(num==4) { if(testval==value) isbetter(); testval-=temp; num-=j; break; } else { if(testval==value) { isbetter(); testval-=temp; num-=j; break; } else backtrack(i+1); } testval-=temp; num-=j; } //fresh test[i]=0; type--; if(value-testval>=stamp[i+1]) backtrack(i+1); } int main() { freopen("d:\\pku1010.in","r",stdin); //freopen("d:\\pku1010.out","w",stdout); while(cin>>stamp[1]) { int i; for(i=2;stamp[i-1];i++) { scanf("%d",stamp+i); } stamp[0]=i-2;//stamp typenum //qsort by value qsort(stamp+1,stamp[0],sizeof(int),cmp); //input need value while(1) { scanf("%d",&value); if(value==0) break; //initialize type=0; savetype=0; testval=0; num=0; tie=false; memset(test,0,sizeof(test)); memset(best,0,sizeof(best)); // backtrack(1); //disp printf("%d",value); if(best[0]==0) printf(" ---- none\n"); else if(tie==true) { printf(" (%d): tie\n",savetype); } else { int cc=0; printf(" (%d): ",savetype); for(cc=0,i=1;i<=stamp[0];i++) { int j; for(j=1;j<=best[i]&&cc<best[0];j++) { printf("%d",stamp[i]); cc++; if(cc<best[0]) printf(" "); } } printf("\n"); } } } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator