王雪非常喜欢锻炼身体,她双十一的时候在淘宝上购买了一套7手的哑铃。如图所示,哑铃有不同的重量的规格。他购买的这套哑铃中只包含1、2、3、5、7、10千克的重量规格,王雪是一个富二代,她为了炫富,每一种重量规格的哑铃各买了99999999999999999999个。她给自己制定了一个锻炼方案,每天可能会组合安装不同重量的哑铃进行锻炼身体,练出自己的八块腹肌,以便更好地去学(Liao)习(Han)。她突然想到,利用 n 个哑铃组合成m千克的重量一共有几种方法呢?同一种哑铃可以使用任意个,因为他买了太多,肯定够用就是了。
timg.jpg
输入格式:
首先输入T表示接下来将会有T组册数数据要测试(T<=10000), 每组输入两个正整数 n 和 m,以空格分隔。n 代表王雪需要的哑铃数目,m 代表他要组合的重量。其中1<=n<=10,1<=m<=1000。
输出格式:
对应每组输入数据,输出不同的方案数,每组输出独占一行。
输入样例:
在这里给出一组输入。例如:
2
3 3
3 5
输出样例:
在这里给出相应的输出。例如:
1
2
这个题目的卡点就在运行时间,如果不简化,就容易运行超时,所以循环范围的 限制非常重要
可复制代码如下
#include<stdio.h>
#include<math.h>
int main()
{
int T,n,m,num;
scanf("%d",&T);
for(int i=0;i<T;i++)
{ scanf("%d %d",&n,&m);
num=0;
for(int a=0;a<=n;a++)
for(int d=0;d<=n-a;d++)
for(int o=0;o<=n-a-d;o++)
for(int p=0;p<=n-a-d-o;p++)
for(int u=0;u<=n-a-d-o-p;u++)
if(a*10+d*7+o*5+p*3+u*2+n-o-p-u-a-d==m)num++;
printf("%d\n",num); }
return 0;
}