| ||||||||||
| 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 | |||||||||
怎么总是WA#include <iostream>
#include <string>
#include <cstdlib>
#include <set>
#include <vector>
using namespace std;
bool tie=false;
vector<int> answer;
int total=0;
void process(multiset<int> &stamps,int customer);
void backtrack(multiset<int>::reverse_iterator b,
multiset<int>::reverse_iterator e,
int c,int s,vector<int> &tmp);
int main()
{
multiset<int> stamps;
vector<int> customers;
int i;
while(cin >>i)
{
do{
if(i==0) break;
stamps.insert(i);
}while(cin >>i);
while(cin>>i){
if(i==0) break;
customers.push_back(i);
}
for(i=0;i<customers.size();i++)
{
process(stamps,customers[i]);
}
stamps.clear();
customers.clear();
}
return 0;
}
void process(multiset<int> &stamps,int customer)
{
vector<int> tmp;
total=0;
tie=false;
answer.clear();
backtrack(stamps.rbegin(),stamps.rend(),customer,4,tmp);
cout <<customer<<" ";
if(total==0){
cout<<"---- none"<<endl;
} else{
cout<<"("<<(answer.size()>>1)<<"): ";
if(tie) cout <<"tie"<<endl;
else {
for(int i=answer.size()-2;i>=0;i-=2)
{ while(answer[i+1]--){
cout <<answer[i];
if(i!=0) cout<<" ";
else cout<<endl;
}
}
}
}
}
void backtrack(multiset<int>::reverse_iterator b,
multiset<int>::reverse_iterator e,
int c,int s,vector<int> &tmp)
{
int i,j;
if(c==0){
for(j=1;j<tmp.size();j+=2)
c += tmp[j];
if(answer.size()>tmp.size())
{
}else if(answer.size()<tmp.size())
{
answer=tmp;
total=c;
tie=false;
}else if(answer.size()==tmp.size()&&total>c)
{
answer=tmp;
total=c;
tie=false;
} else if(total==c)
{
if(answer[0]<tmp[0])
{
answer=tmp;
total=c;
tie=false;
}
if(answer[0]==tmp[0])
{
tie=true;
}
}
return;
}
if(b==e) return;
if(s==0) return;
int stamp=*b;
int count=c/stamp;
if(count>s) return;
++b;
backtrack(b,e,c,s,tmp);
tmp.push_back(stamp);
for(i=1;i<=count;i++)
{
tmp.push_back(i);
//cout<<"count:"<<i<<" stamp:"<<stamp<<" c-count*stamp:"<<c-i*stamp<<endl;
backtrack(b,e,c-i*stamp,s-i,tmp);
tmp.pop_back();
}
tmp.pop_back();
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator