2017-12-21

题目描述

给一个nums[]数组,如[1, 2, 4]
将这些数组合使得: 这些数的和是给出的一个target,如使这些数的和等于4,求这样的组合有多少个?

样例

样例
[1, 1, 1, 1]
[1, 1, 2]
[1, 2, 1]
[2, 1, 1]
[2, 2]
[4]这些组合都可以,他们的和都是4
所以答案是6

解题思路

我们根据给的样例来看,我们是考虑顺序的,因此我们的[1,1,2]与[1,2,1]与[2,1,1]是三种不同的情况...
首先很容易想到的是深搜
#include<iostream>
using namespace std;const int N = 100;
int x[N+1];
int sum,res,n;void dfs(int s){if (s>sum) return ;if (s==sum) {res++;return ;}for (int i=0;i<n;i++){dfs(s+x[i]);}
}int main(){cin>>n;for (int i=0;i<n;i++){cin>>x[i];}while (cin>>sum){res=0;int s=0;dfs(s);cout<<res<<endl;}return 0;
}
因为每一个数可以用多次,所以我们在dfs里面的循环每次都是从1开始的...
嗯,我们应该也可以想到,如果我们能够先对我们输入的数组进行排序的话,那么我们应该就可以提前跳出循环了吧
#include<iostream>
using namespace std;const int N = 100;
int x[N+1];
int sum,res,n;void dfs(int s){if (s>sum) return ;if (s==sum) {res++;return ;}for (int i=0;i<n;i++){if (s+x[i]>sum) return ;dfs(s+x[i]);}
}int main(){cin>>n;for (int i=0;i<n;i++){cin>>x[i];}while (cin>>sum){res=0;int s=0;dfs(s);cout<<res<<endl;}return 0;
}
嗯,最后就是用动态规划了!首先我们应该可以假设dp[n]为和为n时所有的情况,对于我们所给的例子而言,dp[4]=dp[3]+dp[2]+dp[0],其实就是等同于我们第一个数可以为1,2,4,如果第一个数为1的话,又等同于dp[3]=dp[2]+dp[1],如果第一个数为2的话,又等同于dp[2]=dp[1]+dp[0],如果第一个数为4的话,就等同于dp[0],那么我们我们可以给出方程dp[i]+=dp[i-x[j]]...
#include<iostream>
#include<cstring>
using namespace std;const int N = 100;
int x[N+1],dp[N+1];
int sum,n;void cal(){dp[0]=1;for (int i=1;i<=sum;i++){for (int j=0;j<n;j++){if (i-x[j]>=0){dp[i]+=dp[i-x[j]];}}}
}int main(){cin>>n;for (int i=0;i<n;i++){cin>>x[i];}while (cin>>sum){memset(dp,0,sizeof(dp));cal();cout<<dp[sum]<<endl;}return 0;
}

九章算法 | Facebook 面试题 : Backpack VI 背包算法相关推荐

  1. 九章算法 | Facebook 面试题 : 岛的周长

    2017-12-21 题目描述 以二维整数网格的形式给出地图,1代表陆地,0代表水.网格单元水平/垂直连接(不包含对角).整张地图被水完全包围,并且有一个岛(即一个或多个连接的陆地单元).岛上没有&q ...

  2. 统计学习方法第十九章作业:马尔可夫链蒙特卡罗法、吉布斯抽样算法(书上题目) 代码实现

    马尔可夫链蒙特卡罗法 作业19.7 import numpy as np import matplotlib.pyplot as plt from scipy.stats import betacla ...

  3. 九章算法高频算法题 题解

    专栏 | 九章算法 网址 | http://www.jiuzhang.com Google 面试题: Google 面试题 | 目标和 Google 面试题 | 建邮局 Google 面试题 | 0与 ...

  4. 碾压谷歌量子霸权!中国量子计算原型机 九章 问世,比超级计算机快百万亿倍...

    量子优越性实验并不是一个一蹴而就的工作. " 作者 | 李帅飞 在量子计算领域,我国再次实现了里程碑式的重大突破! 12 月 4 日,中国科学技术大学宣布,该校中国科学技术大学潘建伟.陆朝阳 ...

  5. 量子计算机九章概念股票,中国量子计算原型机九章问世 量子计算概念股龙头有哪些?...

    今日凌晨,中国科学技术大学宣布,中国科学技术大学潘建伟.陆朝阳等组成的研究团队与中科院上海微系统所.国家并行计算机工程技术研究中心合作,构建了 76 个光子 100 个模式的量子计算原型机 " ...

  6. 重大突破!中国量子计算机“九章”问世!速度超谷歌“量子霸权”100亿倍

    今日,潘建伟团队量子计算原型机"九章"问世,实现"量子霸权". 去年美国谷歌曾经推出了一台量子计算原型机"悬铃木",当时国际科学界都给予很大 ...

  7. 背包算法轻松搞定——01背包算法、部分背包算法

    这篇文章过程讲得很详细,一文搞懂(点击看原文) 不懂之前觉得很难理解,觉得很复杂,其实没有必要.因为只要懂动态规划就可以很轻松搞定0-1背包算法(部分背包算法更简单,排序即可).之前看了很多篇文章都觉 ...

  8. 九章算法-面试题总结(算法、强化算法、系统设计高清视频观看)

    1 落单的数 题目描述: 有2n+1个数,其中2n个数两两成对,1个数落单,找出这个数.要求O(n)的时间复杂度,O(1)的空间复杂度. 进阶问题:如果有2n+2个数,其中有2个数落单,该怎么办? 分 ...

  9. 最长回文子串动态规划_九章算法 | 微软面试题:最长回文子串

    给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串. 在线评测地址:LintCode 领扣 样例 1: 输入:"abcdzdcab&quo ...

最新文章

  1. 自然语言处理NLP之语义相似度、语言模型、doc2vec
  2. Glass Dragon
  3. C++:类-多态的学习和使用
  4. 【论文阅读整理】TagFi: Locating Ultra-Low Power WiFi Tags Using Unmodified WiFi Infrastructure
  5. Leetcode-169 Majority Element
  6. C# 如何 保存对config文件的修改
  7. 转: android apk 防止反编译技术(1~5连载)
  8. Arcgis栅格时序地图制作---时间轴动态展示多期影像
  9. 在Linux(Ubuntu)下编写编译C语言
  10. Java (计算机编程语言)
  11. Web安全测试之跨站请求伪造(CSRF)
  12. JAVA: 初级项目之基于Swing界面的仿QQ(一)
  13. matlab函数grid,Matlab基本函数-grid、box函数
  14. 国产电脑支持Linux吗,天玥计算机(电脑)支持UOS、银河麒麟、Deepin等国产操作系统...
  15. 七日年化收益率怎么计算
  16. 手机页面下拉刷新效果
  17. Beta阶段冲刺-1
  18. 上海市水电煤热线电话一览
  19. NMN产品是什么性质,nmn产品之间效果差异,学会取舍
  20. 文件生成过程编译过程

热门文章

  1. 机器学习 | 聚类评估指标
  2. 你可能也看过这个生物学家转行后创造的价值 120 亿美元的动画
  3. Blizzard Transitions for Mac - 动态风雪过渡效果FCPX转场
  4. js网页文件资源加载器
  5. CANopen | 移植01 - STM32H743 + Canfestival的移植并让FDCAN1运行CANopen协议
  6. java从基础到入门_Java从入门到入土(30)继承基础
  7. 摄像头poe供电原理_poe供电摄像头有哪些优缺点
  8. canvas笔记-lineCap的使用
  9. Nginx笔记-Nginx中进程结构及使用Linux信号量管理
  10. 计算机在娱乐中的应用有哪些,多媒体技术在娱乐方面的应用