• 数字和为sum的方法数(动态规划)


    题目描述

    给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数。
    当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案。

    输入描述:

    输入为两行:
    第一行为两个正整数n(1 ≤ n ≤ 1000),sum(1 ≤ sum ≤ 1000)
    第二行为n个正整数A[i](32位整数),以空格隔开。

    输出描述:

    输出所求的方案数
    示例1

    输入

    5 15 5 5 10 2 3

    输出

    4
     1 import java.util.Scanner;
     2 
     3 /** 
     4  * @author Dell
     5  *
     6  */
     7 public class Main {
     8 static public long dp[][];
     9 public static void main(String[] args) {
    10     Scanner sc = new Scanner(System.in);
    11     int n = sc.nextInt();
    12     int sum = sc.nextInt();
    13     int [] p = new int[(int) (n+1)];
    14     /**
    15      * 循环全部从1开始
    16      * 
    17      */
    18     for (int i= 1; i < p.length; i++) {
    19         p[i] = sc.nextInt();
    20     }
    21     dp = new long[n+1][sum+1];
    22     for (int i = 0; i <n+1; i++) {
    23         for (int j = 0; j <sum+1; j++) {
    24             dp[i][j] = 0;
    25         }
    26     }
    27     dp[0][0] = 1; //初始化 0 行
    28     for (int i = 1; i <=n; i++) { 
    29         for (int j = 0; j <=sum; j++) { // 0-sum列
    30             long k;
    31             if (j-p[i]<0) {
    32                 k = 0;
    33             }else {
    34                 k = dp[i-1][j-p[i]];
    35             }
    36             dp[i][j] = dp[i-1][j]+k;
    37         }
    38     }
    39     System.out.println(dp[n][sum]);
    40 }
    41 }
  • 相关阅读:
    ModelSim中Altera仿真库的添加
    0欧电阻之作用
    Modelsim之时序仿真
    FPGA之常见错误
    【转】VCC、VDD、VEE、VSS应用
    FROM 子句一个或多个派生表
    asp.net笔记
    GridView分页,个人认为比较简单的。
    GridView中模拟RadioButton组代码
    SPSWC:SearchBoxEx控件
  • 原文地址:https://www.cnblogs.com/the-wang/p/8981278.html
Copyright © 2020-2023  润新知