您的位置:首页 > 其它

【~~~】POJ_1664

2019-07-17 06:37 40 查看
原文链接:http://www.cnblogs.com/zuckerTT/archive/2011/09/24/2189809.html 不用搜索的方式:

int f(int m, int n)

{

    /* 有些盘子不放苹果,已包含在f(m, n - 1)中,返回0*/

    if (m < 0) return 0;

    /* 刚好每个盘子放1个,只有一种情况 */

    if (m == 0) return 1;

    /* 只有1个盘子可以放,也只有全部放入这一种情况 */

    if (n == 1) return 1;

    /* n个盘子内至少都放1个 + 只放入n-1个盘子中 */

    return f(m - n, n) + f(m, n - 1);   

}

用搜索的方式:

#include "stdio.h"

int ans , n , m;

void dfs(int k , int s , int t)

{

    int i ;

    if( s==n )

    {

        if(t==m) ans++;

            return ;

    }

    for(i=k;i>=0; i--)

    {

        if( t + i <= m )

        {

            dfs(i,  s+1, t+i);

        }

    }

}

int main()

{

    int t , i , j ;

    scanf("%d",&t);

    while(t--)

    {

        ans = 0;

        scanf("%d %d",&m,&n);

        for( i = m ; i >= 0 ; i-- )

            dfs(i,1,i);

        printf("%d\n",ans);

    }

    return 0;

}

转载于:https://www.cnblogs.com/zuckerTT/archive/2011/09/24/2189809.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: