zoukankan      html  css  js  c++  java
  • poj1664

    用DFS算法即可。

    思想:(1)按照苹果数递减的方法,从而保证了所排列的情况不会出现重复的现象。

            (2)判断条件(s==n)即所排列的盘子数和总盘子数相等的情况下,比较所放的苹果数是否相等,即 t==m.

            (3)利用count来记录每次排列完比较后的结果,也就是题目所要求的不同分法。

    poj1664
    #include"iostream"
    using namespace std;
    int count=0;
    int M,m,n;
    void DFS(int k, int s,int t) //k表示每次m-1所得到的数,s表示盘子数,t表示苹果总数
    {

    if( s==n ){
    if(t==m) count++;
    return ;
    }
    int i;
    for(i=k;i>=0; i--){
    if( t + i <= m )
    {
    DFS(i, s
    +1, t+i);
    }
    else //剪枝,即减少搜索次数,可有可无,但会影响运行时间
    {
    continue;
    }
    }
    }
    int main()
    {

    int i;
    scanf(
    "%d",&M);
    while(M--)
    {
    count
    =0;
    scanf(
    "%d %d",&m, &n);
    for(i=m;i>=0;i--)
    {
    DFS(i,
    1,i);
    }
    printf(
    "%d\n",count);

    }
    return 0;



    }

    http://poj.org/problem?id=1664

  • 相关阅读:
    上下界网络流——概念解析与快速入门(待修改)
    maomao的现在与未来
    exgcd证明和最基础应用
    快速入门Splay
    luogu 2515
    bzoj 1996
    *51nod 1409
    51nod 1412
    51nod 1503
    51nod 1020
  • 原文地址:https://www.cnblogs.com/FCWORLD/p/1902789.html
Copyright © 2011-2022 走看看