背包dp之简单变形
来源:互联网 发布:乐视2pro相机优化 编辑:程序博客网 时间:2024/05/22 08:19
题意:
给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数。
当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案。
题目输入输出:
输入描述:
输入为两行:
第一行为两个正整数n(1 ≤ n ≤ 1000),sum(1 ≤ sum ≤ 1000)
第二行为n个正整数Ai,以空格隔开。
输出描述:
输出所求的方案数
输入
5 15 5 5 10 2 3
输出
4
思路:
动态规划算法。dp[i][j]代表用前i个数字凑到j最多有多少种方案。
dp[i][j]=dp[i-1][j]; //不用第i个数字能凑到j的最多情况
dp[j][j]+=dp[i-1][j-value[i]]; //用了i时,只需要看原来凑到j-value[i]的最多情况即可。并累加
dp[0]=1; //初始化,表示凑到0永远有1种方案。
按01背包的思路写循环即可,也能化成一维的dp。
代码:
#include <stdio.h>#define LL long longLL dp[1002]={0};int a[1002];int main(){ int n,sum; int i,j; scanf("%d %d",&n,&sum); for(i=1;i<=n;i++) { scanf("%d",&a[i]); } dp[0]=1; for(i=1;i<=n;i++) { for(j=sum;j>=a[i];j--) { dp[j]+=dp[j-a[i]]; } } printf("%lld\n",dp[sum]); return 0;}
阅读全文
0 0
- 背包dp之简单变形
- 背包dp之01背包变形
- hdu 2041 超级楼梯(简单dp 0/1背包变形)
- DP 之 SPOJ SCUBADIV (三维 01背包变形)
- 简单DP之二维背包问题
- POJ1717 Dominoes DP,背包的变形
- HDU5616 Jam's balance[背包dp变形]
- HDU5543 Pick The Sticks [背包dp变形]
- 简单背包DP
- 简单dp 完全背包
- 简单的背包变形HDU1203,HDU2955
- hdu2955 小偷 01背包 简单变形
- 背包dp之二维背包
- 背包dp之分组背包
- 简单DP之最少硬币问题(多重背包问…
- 01 背包 变形之转移价值
- dp之背包问题
- HDU 1087 lcs变形 (简单DP)
- 一文总结条件熵、交叉熵、相对熵、互信息
- java.io.IOException: Too many open files
- 虚拟机+linux系统搭建java运行环境
- JAVA的开始:JDK环境变量配置
- 基于PyHusky的分布式爬虫原理及实现
- 背包dp之简单变形
- 给任意一段URL,取出该URL中包含的扩展名
- [AHK]按住左键可以移动鼠标下的窗口
- MyEclipse 10破解方法及下载地址
- vue动画
- javaEE中的spring配置笔记
- 每天一python 题 0000
- Xamarin.Form 弹出自定义对话框
- android 退出系统的解决办法