| ||||||||||
| 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 | |||||||||
Re:数据很水。简单剪枝即可。贴个代码参考。In Reply To:数据很水。简单剪枝即可。贴个代码参考。 Posted by:0943041192 at 2011-02-13 13:48:20 > #include <iostream>
> #include <cstdlib>
> #include <algorithm>
> #include <vector>
> #include <stack>
> #include <map>
> #include <functional>
> #define REP(i,n) for(i=0;i<n;i++)
>
> using namespace std;
>
> map<int,int,greater<int> > mp;
> int g;
> stack<int> stk;
>
> void factor(vector<int> &a , int n , int min)
> {
> int i;
> for ( i = min ; i <= n/2 ; i++)
> {
> if( n%i == 0 ) a.push_back(i);
> }
> a.push_back(n);
> }
>
> bool dfs(int goal,int m)
> {
> bool flag;
> map<int, int,greater<int> >::iterator ite;
> if( goal == 0 )
> {
> //搜索完成
> if( m == 1 ) return true;
> else{ //深入
> m--;
> goal = g ;
> flag = dfs(goal,m);
> if(flag) return true;
> else
> return false;
> }
> }
> else
> {
> if( !stk.empty() && goal != g )
> ite = mp.find(stk.top());
> else
> ite = mp.begin();
> for (; ite != mp.end() ; ite++)
> {
> //对每个数据进行判断。
> if( goal >= ite->first && ite->second > 0 )
> {
> //可用
> ite->second--;
> stk.push(ite->first);
> if(dfs(goal-ite->first,m)) return true;
> else
> {
> ite->second++;
> stk.pop();
> //top--;
> if( goal == g ) return false;
> }
> }
> }
> return false;
> }
> }
>
> int main()
> {
> int goal,i,t,n,m,x,sum;
> map<int,int,greater<int> > temp;
> vector<int> a;
> cin>>n;
> while ( n != 0 )
> {
> //sum存储所有数据和,mp存储各数据及其出现次数,按大到小保存,a保存候选数据goal
> a.clear();
> mp.clear();
> sum = 0 ;
> REP(i,n)
> {
> cin>>t;
> sum += t;
> mp[t]++;
> }
> factor(a,sum,mp.begin()->first);
> temp = mp;
> REP(i,a.size()-1)
> {
> //最后一个为和,数据中每个为候选数据
> m = sum/a[i];
> goal = a[i];
> g = goal;
> //需要m次为a[i]长度的木棍
> if(dfs(goal,m)) //搜索成功
> {
> cout<<a[i]<<endl;
> break;
> }
> //回复map
> mp = temp;
> }
> if( i == a.size()-1 ) cout<<a[a.size()-1]<<endl;
> cin>>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