百练2755 奇妙的口袋 【深搜】or【动规】or【普通递归】or【递推】
- 3
- 20
- 20
- 20
- 3
这题非常经典,能够用非常多方法来做,我试了下面几种:
DFS:耗时0ms
- #include <stdio.h>
- int arr[22], ans, n, sum;
- void DFS(int k)
- {
- if(sum >= 40){
- if(sum == 40) ++ans;
- return;
- }
- for(int i = k; i <= n; ++i){
- sum += arr[i];
- DFS(i + 1);
- sum -= arr[i];
- }
- }
- int main()
- {
- int i;
- scanf("%d", &n);
- for(i = 1; i <= n; ++i)
- scanf("%d", arr + i);
- sum = ans = 0; DFS(1);
- printf("%d\n", ans);
- return 0;
- }
普通递归:耗时60ms
- #include <stdio.h>
- int arr[22], n;
- int getAns(int sum, int k)
- {
- if(sum == 0) return 1;
- if(k == 0) return 0;
- return getAns(sum, k - 1) + getAns(sum - arr[k], k - 1);
- }
- int main()
- {
- int i;
- scanf("%d", &n);
- for(i = 1; i <= n; ++i)
- scanf("%d", arr + i);
- printf("%d\n", getAns(40, n));
- return 0;
- }
DP:耗时0ms
- #include <stdio.h>
- int arr[22], n, dp[42][22];
- //dp[i][j]表示从前j种物品里配出价值i的方法数
- int main()
- {
- int i, j;
- scanf("%d", &n);
- for(i = 1; i <= n; ++i){
- scanf("%d", arr + i);
- dp[0][i] = 1;
- }
- for(dp[0][0] = i = 1; i <= 40; ++i){
- for(j = 1; j <= n; ++j){
- dp[i][j] = dp[i][j - 1];
- if(i - arr[j] >= 0) dp[i][j] += dp[i - arr[j]][j - 1];
- }
- }
- printf("%d\n", dp[40][n]);
- return 0;
- }
递推型DP:耗时0ms
- #include <stdio.h>
- int n, sum[42];
- //sum[i]表示价值能组成i的方法数
- int main()
- {
- int i, j, temp;
- scanf("%d", &n);
- for(i = 0, sum[0] = 1; i < n; ++i){
- scanf("%d", &temp);
- for(j = 40; j; --j){
- if(j + temp > 40) continue;
- if(sum[j]) sum[j + temp] += sum[j];
- }
- ++sum[temp];
- }
- printf("%d\n", sum[40]);
- return 0;
- }
百练2755 奇妙的口袋 【深搜】or【动规】or【普通递归】or【递推】的更多相关文章
- 百练2755:神奇的口袋(简单dp)
描述有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40.John现在有n个想要得到的物品,每个物品的体积分别是a1,a2……an.John可以从这些物品中选择一些 ...
- NYOJ 10 skiing (深搜和动归)
skiing 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描写叙述 Michael喜欢滑雪百这并不奇怪. 由于滑雪的确非常刺激.但是为了获得速度.滑的区域必须向下倾斜.并且 ...
- 深搜基础题目 杭电 HDU 1241
HDU 1241 是深搜算法的入门题目,递归实现. 原题目传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1241 代码仅供参考,c++实现: #incl ...
- DFS-BFS(深搜广搜)原理及C++代码实现
深搜和广搜是图很多算法的基础,很多图的算法都是从这两个算法中启发而来. 深搜简单地说就是直接一搜到底,然后再回溯,再一搜到底,一直如此循环到没有新的结点. 广搜简单地说就是一层一层的搜,像水的波纹一样 ...
- HDOJ/HDU 1015 Safecracker(深搜)
Problem Description === Op tech briefing, 2002/11/02 06:42 CST === "The item is locked in a Kle ...
- [codevs1049]棋盘染色<迭代深搜>
题目链接:http://codevs.cn/problem/1049/ 昨天的测试题里没有打出那可爱的迭代深搜,所以今天就来练一练. 这道题其实我看着有点懵,拿着题我就这状态↓ 然后我偷偷瞄了一眼hz ...
- C++ 深搜调错
因为前两天某网站的比赛一个深搜错了,我只得了3等奖,我找不到错误,给别的大佬看他们又嫌恶心.emm……,比赛结束后我自己反思了一下,深搜写错了该怎么办,或者说怎样避免写错. 首先,变量名不要太ex,比 ...
- [深搜]C. 【例题3】虫食算
C . [ 例 题 3 ] 虫 食 算 题目解析 正解 : Dfs + 剪枝 依题意,把样例以加法的形式展现出来. 根据加法的性质,可以得出有两种情况:有进位和没有进位的. 而从百位到最高位的结果,又 ...
- HDU--杭电--1195--Open the Lock--深搜--都用双向广搜,弱爆了,看题了没?语文没过关吧?暴力深搜难道我会害羞?
这个题我看了,都是推荐的神马双向广搜,难道这个深搜你们都木有发现?还是特意留个机会给我装逼? Open the Lock Time Limit: 2000/1000 MS (Java/Others) ...
随机推荐
- iOS 格式化输出符号与类型转换
1.iOS 格式化输出符号 %@ 对象 %d, %i 整数 %u 无符号整形 %f 浮点(双字节) %x, %X 二进制整数 %o 八进制整数 %zi ...
- javascript基础学习(十二)
javascript之BOM 学习要点: 屏幕对象 History对象 Location对象 一.屏幕对象 Screen对象是一个由javascript自动创建的对象,该对象的主要作用是描述客户端的显 ...
- MyBatis学习笔记(3)—— 利用mybatis灌入假数据
由于第三方厂商未能按时提供实时数据,故需要纯手动导入一些实时数据,用于统计分析.正好最近自己学习了mybatis .因此使用mybatis 配置一个select.insert 的简单操作语句,用于灌入 ...
- z-index的理解 z-index 属性仅在节点的 position 属性为 relative, absolute 或者 fixed 时生效.
今天做游戏的Exercise模式的时候,发现把所有的div设置为position:absolute;后,点击play进入到游戏界面的时候,鼠标点击数字的时候,完全没反应.经过我的反复检查,发现只要给所 ...
- mysql操作之二
特殊数据类型 表约束 表连接 索引 触发器 安全性 DB设计 alter table student modify id int primary key; 主銉不可重复修改 alter table s ...
- 栈的讲解 和 栈的生长方向 源代码技巧分析,简直没SEI 啦
函数的局部变量,都是存放在"栈"里面,栈的英文是:STACK.STACK的大小,我们可以在stm32的启动文件里面设置,以战舰stm32开发板为例,在startup_stm32f1 ...
- 《30天自制操作系统》读书笔记(3) 引入C语言
这一次的学习相当曲折, 主要是因为粗心, Makefile里面的错误导致了文件生成出现各种奇奇怪怪的问题, 弄得心力交瘁, 因此制作过程还是尽量按着作者的路子来吧. 作者提供的源码的注释在中文系统下是 ...
- Keil C51中变量和函数的绝对地址定位问题
1.变量绝对地址定位 1) 在定义变量时使用 _at_ 关键字加上地址就可. unsigned char idata myvar _at_ 0x40; 把变量 myvar 定义在 idata 的 0 ...
- Qt for Android 开发大坑123
http://blog.csdn.net/qyvlik/article/details/50989685 http://blog.csdn.net/qyvlik/article/details/515 ...
- Windows NT 驱动程序开发人员提示 -- 应注意避免的事项
下面是开发人员在使用 Windows NT 设备驱动程序时应当避免的事项列表: 1. 一定不要在没有标注 I/O 请求数据包 (IRP) 挂起 (IoMarkIrpPending) 的情况下通过调度 ...