动态规划
Posted clairexxx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态规划相关的知识,希望对你有一定的参考价值。
- 1)题目描述:
给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数。当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案。
1 package pro20190110; 2 3 import java.util.Scanner; 4 5 public class Main { 6 public static void main(String[] args) { 7 Scanner in = new Scanner(System.in); 8 int n = in.nextInt(); 9 int sum = in.nextInt(); 10 int[] arr = new int[n]; 11 for (int i = 0; i < n; i++) { 12 arr[i] = in.nextInt(); 13 } 14 15 //dp[i][j] 存放第i个数字之前组合和为j的方案个数 16 int[][] dp = new int[n + 1][sum + 1]; 17 18 for (int i = 0; i <= n; i++) { 19 dp[i][0] = 1; 20 } 21 22 for (int j = 1; j <= sum; j++) { 23 for (int i = 0; i < n; i++) { 24 if (j - arr[i] < 0) { 25 //如果小于0 则等于该列上一行 26 dp[i + 1][j] = dp[i][j]; 27 } else { 28 //等于该列上一行加上上一行中差值对应列的元素和 29 dp[i + 1][j] = dp[i][j] + dp[i][j - arr[i]]; 30 } 31 } 32 } 33 34 35 System.out.println(dp[n][sum]); 36 } 37 }
是
以上是关于动态规划的主要内容,如果未能解决你的问题,请参考以下文章