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 |
贴我的代码。。搜索(或者递归式的)#include <iostream> using namespace std; int t,M,N; int result=0; int f(int m,int n) //递归式。。 { if(m<0) return 0; if(m==0||n==1) return 1; return f(m-n,n)+f(m,n-1); } /****搜索中假设所有的盘子排成一个不增序列***/ void dfs(int depth,int max,int apples) //用搜索做 这是第depth深度,即第depth个盘子, { //还有apples个苹果,这个盘子上放max个苹果 if(depth==N) //最后一个盘子放置了 { if(apples==0) { result++; return; } else return; } for(int i=max;i>=0;i--) { dfs(depth+1,i,apples-i); } } int main(int argc, char* argv[]) { cin>>t; while(t-->0) { cin>>M>>N; for(int k=M;k>=0;k--) dfs(1,k,M-k ); //第一个盘子上放了k个苹果,还剩余M-k个苹果 cout<<result<<endl; result=0; //cout<<f(M,N)<<endl; } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator