• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

数字组合动态规划

武飞扬头像
一切一切都会好
帮助1

小蒜有 n(1 \le n \le 20)n(1≤n≤20) 个正整数,找出其中和为 t(tt(t 也是正整数)的可能的组合方式。如:
n=5,5n=5,5 个数分别为 1,2,3,4,51,2,3,4,5,t=5t=5;
那么可能的组合有 5=1 45=1 4 和 5=2 35=2 3 和 5=55=5 三种组合方式。

输入格式

输入的第一行是两个正整数 nn 和 tt,用空格隔开,其中 1 \le n \le 201≤n≤20, 表示正整数的个数,tt 为要求的和 (1 \le t \le 1000)(1≤t≤1000)

接下来的一行是 nn 个正整数,用空格隔开。

输出格式

和为 tt 的不同的组合方式的数目。

输出时每行末尾的多余空格,不影响答案正确性

样例输入复制

5 5
1 2 3 4 5

样例输出复制

3
  1.  
    #include <stdio.h>
  2.  
    int dp[21][1005];
  3.  
    int v[21];
  4.  
    int main(){
  5.  
    int n,t;
  6.  
    scanf("%d%d",&n,&t);
  7.  
    for(int i=1;i<=n;i ){
  8.  
    scanf("%d",&v[i]);
  9.  
    }
  10.  
    for(int i=0;i<=n;i ){
  11.  
    dp[i][0]=1;
  12.  
    }
  13.  
    for(int i=1;i<=n;i ){
  14.  
    for(int j=1;j<=t;j ){
  15.  
    dp[i][j]=dp[i-1][j] (j-v[i]>=0?dp[i-1][j-v[i]]:0);
  16.  
    }
  17.  
    }
  18.  
    printf("%d",dp[n][t]);
  19.  
    }
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhggbhff
系列文章
更多 icon
同类精品
更多 icon
继续加载