锻炼身体

Time Limit: 1 Sec  Memory Limit: 128 MB

Description

HaiLin非常喜欢锻炼身体,他在淘宝上购买了一套7手的哑铃。如图所示,哑铃有不同的重量的规格。他购买的这套哑铃中只包含1、2、3、5、7、10千克的重量规格,Hailin是一个富二代,他为了炫富,每一种重量规格的哑铃各买了99999999999999999999个。他给自己制定了一个锻炼方案,每天可能会组合安装不同重量的哑铃进行锻炼身体,练出自己的八块腹肌,然后去学(Liao)习(Mei)了(Zi)。Hailin突然想到,利用n个哑铃组合成m千克的重量一共有几种方法呢?同一种哑铃可以使用任意个,因为他买了太多,肯定够用就是了。

Input

多组输入数据(10000组),每组输入两个正整数n和m,以空格分隔。n代表Hailin需要的哑铃数目,m代表他要组合的重量。其中1<=n<=10,1<=m<=1000。输入以文件尾结束。

Output

对应每组输入数据,输出不同的方案数,每组输出独占一行。

Sample Input

2 3
3 5

Sample Output

1
2

HINT

 

利用2个哑铃组合成3千克的方法只有一种:1个1千克的哑铃 加上 1个2千克的哑铃。

利用3个哑铃组合成5千克的方法只有两种,方法一:2个1千克的哑铃 加上 1个3千克的哑铃;方法二:1个1千克的哑铃 加上 2个2千克的哑铃。

题解:

看了提示还是以为是找规律的数学题,后来发现就是组合,套多重循环筛选出满足条件[个数][重量] 的个数。

#include <stdio.h>
int main()
{
    int a[6] = {1,2,3,5,7,10};
    int book[11][1001] = {0};
    int i,j,k,o,p,l,n,m;
    for( i = 0 ; i < 11 ; i ++ ) 
        for( j = 0 ; j < 11 ; j ++ )
            for( k = 0 ; k < 11 ; k ++ )
                for( o = 0 ; o < 11 ; o ++ )
                    for( p = 0 ; p < 11 ; p ++ )
                        for( l = 0 ; l < 11 ; l ++ ){
                            int num = i + j + k + o + p + l;
                            int weight = a[0]*i + a[1]*j + a[2]*k + a[3]*o + a[4]*p + a[5]*l;
                            if(num < 11 && weight < 1001)
                                book[num][weight]++;
                        }
    while(scanf("%d %d",&n,&m)!=EOF)    
        printf("%d\n",book[n][m]);                                                                              
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值