神奇的口袋(百练2755) ( DFS + DP )
2015-08-11 10:47
447 查看
题目描述:有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40。
John现在有n个想要得到的物品,每个物品的体积分别是a 1,a 2……a n。John可以从这些物品中
选择一些,如果选出的物体的总体积是40,那么利用这个神奇的口袋,John就可以得到这些物品。
现在的问题是,John有多少种不同的选择物品的方式。 输入 输入的第一行是正整数n (1 <= n <= 20),
表示不同的物品的数目。接下来的n行,每行有一个1到40之间的正整数,分别给出a 1,a 2……a n
的值。 输出 输出不同的选择物品的方式的数目。
样例输入 3 20 20 20 ;输出 3。
思 路:
1:递归解法;
代码如下:
代码如下:
John现在有n个想要得到的物品,每个物品的体积分别是a 1,a 2……a n。John可以从这些物品中
选择一些,如果选出的物体的总体积是40,那么利用这个神奇的口袋,John就可以得到这些物品。
现在的问题是,John有多少种不同的选择物品的方式。 输入 输入的第一行是正整数n (1 <= n <= 20),
表示不同的物品的数目。接下来的n行,每行有一个1到40之间的正整数,分别给出a 1,a 2……a n
的值。 输出 输出不同的选择物品的方式的数目。
样例输入 3 20 20 20 ;输出 3。
思 路:
1:递归解法;
代码如下:
#include <iostream> #include <stdio.h> #include <algorithm> #include <string.h> #include <climits> using namespace std; #define maxn 110 int vis[maxn]; int DFS( int w, int k ) { if( w == 0 ) return 1;//刚好符合条件,方法+1 if( k <= 0 ) return 0;//条件不符,结束DFS return DFS( w, k-1 ) + DFS( w - vis[k], k-1 );//该物品放入背包与不放入背包两种情况 } int main() { int n; cin>>n; for( int i = 1; i <= n; i ++ ) cin>>vis[i]; cout<<DFS( 40, n ); return 0; }2;动归解法。
代码如下:
#include <iostream> #include <stdio.h> #include <algorithm> #include <string.h> #include <climits> using namespace std; #define maxn 110 int vis[maxn]; int dp[maxn][maxn]; int main() { int n; cin>>n; memset( dp, 0, sizeof(dp) ); for( int i = 1; i <= n; i ++ ) cin>>vis[i],dp[0][i] = 1; dp[0][0] = 1; for( int w = 1; w <= 40; w ++ ) { for( int k = 1; k <= n; k ++ ) { dp[w][k] = dp[w][k-1]; if( w - vis[k] >= 0 ) dp[w][k] += dp[w-vis[k]][k-1]; } } cout<<dp[40] ; return 0; }
相关文章推荐
- Javascript SHA-1:Secure Hash Algorithm
- Win2003利用dfs(分布式文件系统)在负载均衡下的文件同步配置方案
- 基于Android中dp和px之间进行转换的实现代码
- Android中dip、dp、sp、pt和px的区别详解
- win2003分布式文件系统(dfs)配置方法[图文详解]
- win2003分布式文件系统及其部署 图文教程
- LFC1.0.0 版本发布
- Hadoop2.6+jdk8的安装部署(1)——使用jar包安装部署【详细】
- Hadoop FS Shell
- DFS使用方法总结
- Android px、dp、sp之间相互转换
- FastDFS注意事项
- 无忧技术带您预览DFS(分布式文件系统)管理控制台
- [转]可视化的数据结构和算法
- android中像素单位dp、px、pt、sp的比较
- C 语言实现迷宫 DFS算法
- Android对px和dip进行尺寸转换的方法
- 统计文件中不小于某一长度的单词的个数(泛型算法实现)
- Android根据分辨率进行单位转换-(dp,sp转像素px)
- android 尺寸 dp,sp,px,dip,pt详解