
Java编程题:数字和为sum的方法数(动态规划——背包问题)
发布日期:2021-05-08 06:38:28
浏览次数:21
分类:精选文章
本文共 1736 字,大约阅读时间需要 5 分钟。
数字和为sum的方法数
给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数。当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案。
输入描述:
输入为两行: 第一行为两个正整数n(1 ≤ n ≤ 1000),sum(1 ≤ sum ≤ 1000) 第二行为n个正整数A,以空格隔开。输出描述:
输出所求的方案数示例1
输入 5 15 5 5 10 2 3 输出 4解析:
给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数。当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案。采用动态规划算法:状态:dp[i][j]代表用前i个数字凑到j最多有多少种方案。
状态递推:dp[i][j]=dp[i-1][j];
//不用第i个数字能凑到j的最多情况。 dp[i][j]=dp[i-1][j]+dp[i-1][j-value[i]];
//用了i时,需要看原来凑到j-value[i]
的最多情况即可,将两种情况累加即可。 初始值: dp[0]=1; //表示凑到0永远有1种方案。 返回值:dp[n][sum] 
import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt();// 数组长度为n表示n个数字 int sum = scanner.nextInt();// 部分元素求和sum int[] value = new int[n+1];//初始化数组 for(int i=1;i<=n;i++){ value[i] = scanner.nextInt(); } long[][] dp = new long[n+1][sum + 1];//动态规划数组 for(int j=0;j= value[i]) { dp[i][j] = dp[i-1][j]+ dp[i-1][j - value[i]]; }else if(j
简化版本:
import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt();// 数组长度为n表示n个数字 int sum = scanner.nextInt();// 部分元素求和sum int[] value = new int[n];//初始化数组 long[] dp = new long[sum + 1];//动态规划数组 dp[0] = 1;//index=0的初始化值 for (int i = 0; i < n; i++) { value[i] = scanner.nextInt(); for (int j = sum; j >= 0; j--) { if (j >= value[i]) { dp[j] += dp[j - value[i]]; } } } System.out.println(dp[sum]); }}
来源:
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月21日 02时45分26秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
A simple problem HDU-2522 【数学技巧】
2021-05-11
487-3279 POJ-1022【前导0~思维漏洞】
2021-05-11
Struts2-从值栈获取list集合数据(三种方式)
2021-05-11
vscode中快速生成vue模板
2021-05-11
demo---购物车的多条记录保存(cookie)
2021-05-12
参考图像
2021-05-12
设计模式(18)——中介者模式
2021-05-12
用JavaScript实现希尔排序
2021-05-12
python初学者容易犯的错误
2021-05-12
Qt之QImage无法获取图片尺寸(宽和高)
2021-05-12
推荐几篇近期必看的视觉综述,含GAN、Transformer、人脸超分辨、遥感等
2021-05-12
Java-类加载过程
2021-05-12
BUU-MISC-认真你就输了
2021-05-12
BUU-MISC-caesar
2021-05-12
【专题2:电子工程师 之 上位机】 之 【36.事件重载】
2021-05-12
【专题3:电子工程师 之 上位机】 之 【46.QT音频接口】
2021-05-12