| ||||||||||
| 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 | |||||||||
我的dp刚好999msIn Reply To:这道题是搜索吗?我全搜剪枝老是tle Posted by:cpp051300448324 at 2005-04-24 00:31:02 > #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