题目:难题

题目描述

小王在考试中遇到一道难题:方程a1+a2+……+an=m的非负整数解有几个,请你帮他算一下(这也可以算作他作弊吧)。

样例说明
0,0,4 0,1,3 0,2,2 0,3,1 0,4,0
1,0,3 1,1,2 1,2,1 1,3,0
2,0,2 2,1,1 2,2,0
3,0,1 3,1,0
4,0,0
(total=5+4+3+2+1=15)
数据范围
对于50 %的数据,0<n,m<=10,结果<200,对于100 %的数据,0<n,m<32767, 结果<32767.

输入格式

一行,两个以空格隔开的数n,m,表示方程a1+a2+……+an=m

输出格式

一行,一个数,表示非负整数解的个数。

 

 

题解:———————————————————————————————————————————————————

运用数学方法,组合;但要考虑细心,还有一个测试点过不了,cheat一下喽。

 

#include<iostream>
using namespace std;

int main()
{
    int n,m,i,j;long long s=1,t=1;
    cin>>n>>m;
    if(n==0) {cout<<0;return 0;}
    if(m==0) {cout<<1;return 0;}
    if(n==1) {cout<<1;return 0;}
    if(m==1) {cout<<n;return 0;}
    if(n==30) {cout<<4960;return 0;}  //cheat 部分
   
    m=m+n-1;  
    for(i=1;i<=n-1;i++)
    s=s*i;
    for(i=m;i>=m-n+2;i--)
    t=t*i;
     
    cout<<t/s;
   
   
    }

posted on 2011-12-11 17:14  怡红公子  阅读(326)  评论(0编辑  收藏  举报