zoukankan      html  css  js  c++  java
  • Equal Sum Sets

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=49406

    题意:

          输入n,k,s,求在不小于n的数中找出k个不同的数的和等于s的可能性有多少种。

    样例:

        

    Sample Input
    9 3 23
    9 3 22
    10 3 28
    16 10 107
    20 8 102
    20 10 105
    20 10 155
    3 4 3
    4 2 11
    0 0 0
    Sample Output
    1
    2
    0
    20
    1542
    5448
    1
    0
    0

      分析:

           用递推的方法把所有的值先求出来,保存到一个数组中,然后直接输出所求值即可。

    公式:d[n][k][s]=d[n-1][k][s]+d[n-1][k-1][s-1]   s>=n时

       d[n][k][s]=d[n-1][k][s]    s<n时

     1 #include<iostream> 
     2 #include<cstring>  
     3 using namespace std;   
     4 int i,d[25][15][160],sum;  
     5 void db()  
     6 {  
     7     memset(d,0,sizeof(d));  
     8        //一些特殊值
     9     for( i=1;i<=20;i++)                  
    10     {  
    11         d[i][1][i]=1;  
    12         d[i][0][0]=1;  
    13     }  
    14     for( i=2;i<=20;i++)  
    15     {  
    16         for(int k=1;k<=10;k++)  
    17         {  
    18             if(k>i)   break;     //不可能有集合满足
    19             for(int s=1;s<=155;s++)  
    20             {  
    21                 sum=0;  
    22                 sum=sum+d[i-1][k][s];  
    23                 if(s>=i) sum=sum+d[i-1][k-1][s-i];  
    24                 d[i][k][s]=sum;  
    25                }  
    26         }  
    27     }  
    28 return;
    29 }  
    30   int main()  
    31 {  
    32     db();  
    33     int n,k,s; 
    34     cin>>n>>k>>s;
    35     while(n&&k&&s)  
    36     { 
    37         cout<<d[n][k][s]<<endl;
    38         cin>>n>>k>>s;
    39     }
    40     return 0;  
    41 }  
  • 相关阅读:
    求解答可用性测试记
    Teambition可用性测试记
    海丁网可用性测试记
    go语言的切片
    go语言的数组
    go语言的函数
    go语言的接口
    go语言的结构体
    go语言的flag
    创建二叉树和三种遍历
  • 原文地址:https://www.cnblogs.com/fenhong/p/4694336.html
Copyright © 2011-2022 走看看