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 |
这道题是搜索吗?我全搜剪枝老是tle#include<iostream> #include<vector> #include<fstream> #include<algorithm> using namespace std; vector<int> vec; bool record[1000]; bool tmp[1000]; int max_; bool signal; int limit; void search(int i,int total,int m){ if(i==vec.size()){ if(total!=0)return; if(m<max_){ signal=1; max_=m; /* cout<<max_<<endl; */ copy(tmp,tmp+vec.size(),record); /* for(int j=0;j<vec.size();j++){ cout<<record[j]; } cout<<endl; */ } return ; } tmp[i]=1; if(total>limit)return ; search(i+1,total+vec[i],total+vec[i]>m?(total+vec[i]):m); tmp[i]=0; if(total-vec[i]<0)return ; search(i+1,total-vec[i],m); } int main(){ //ifstream cin("tmp.txt"); int count; //cin>>count; scanf("%d",&count); int i,j; while(count--){ int M; //cin>>M; scanf("%d",&M); limit=0; for(i=0;i<M;i++){ int in; /* cin>>in; */ scanf("%d",&in); vec.push_back(in); limit+=in; } if(limit%2!=0){ cout<<"IMPOSSIBLE"<<endl; vec.clear(); continue; } signal=0; limit/=2; max_=1000000; search(0,0,0); if(signal){ for(i=0;i<vec.size();i++){ if(record[i])cout<<"U"; else cout<<"D"; } cout<<endl; } else cout<<"IMPOSSIBLE"<<endl; vec.clear(); } system("pause"); return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator