两个数求不能组合成的最大数
来源:互联网 发布:js调用function函数 编辑:程序博客网 时间:2024/05/16 19:47
在网上看到了类似的题目,本来觉得是一个益智类题目,于是好奇来做
发现和2017年蓝桥杯的一道编程题很相似。于是拿来认真做一下
题目意思:
小明开商店,只有2种类型的糖果,第一种每包有5个,第二种每包有3个,小明发现,他可以用这两种糖组合成很多数目的糖果,如8 13 等。但是也有一些数目组合不了,如1 2 4 6 。那么问题来了,求最大的无法组合的数
这道题看似是数学题。但是其实是一个编程题
为什么那?
这道题可以用背包来做!!!!!
原理:
用背包其实可以判断物品放满背包没有。
把dp全部初始化为负无穷。把dp【0】赋值 为0
这样如果dp【i】里面的值大于0,就表示背包放满了
把这几种的糖果(当然可以是好几种)看做物品,价值随便取只要大于零,每包的个数看做体积
#include <algorithm>#include <string.h>#include <iostream>#include <stdio.h>#include <string>#include <vector>#include <queue>#include <map>#include <set>using namespace std;bool s[99999];int dp[99999];int num[3];int gcd(int a,int b){ if(b == 0) return a; return gcd(b,a%b);}int main(){ int a,b; while(scanf("%d%d",&a,&b)!=EOF) { for(int j=0; j<=99999; j++) { dp[j]=-99999999; } num[1]=a,num[2]=b; dp[0]=0; for(int i=1; i<=2; i++) { for(int j=num[i]; j<=99999; j++) { dp[j]=max(dp[j],dp[j-num[i]]+1); } } int sum=0; for(int i=1; i<=99999; i++) { if(dp[i]<0) { sum=i; } } printf("%d\n",sum); } return 0;}这是两个的情况,如果有多个的情况,把物品的个数改一下就行了
我还有一个小发现:
对于只有两个的情况
他们不能组成的最大是两数之积减去两数之和
比如 5 3 : 5*3-(5+3)=7
10 11 :10*11-(10+11)=89
0 0
- 两个数求不能组合成的最大数
- 最大不能组合的数
- 两个序列组合成最大的数Create Maximum Number
- 求两个数的最大公因数
- 求两个数的最大公约公倍数
- 求两个数的最大公因数
- 求两个数的最大公因数
- hdu 1792 (最大不能组合数,最大不能组合数的个数)
- 求两个数的阶乘及其组合数
- 不使用比较操作求两个数的最大数
- 求最大的组合数:用不同的数字组合,找到最大的那一个组合
- 最大的两个数
- 关于数论中的互质数的最大不能组合数
- 求两个三位数相乘得到的最大的回文数
- 求两个数的最大公约数和最大公倍数
- C++:求10个数中最大的两个数
- vc++ 求两个数的最大公因数和最小公倍数
- 求两个数的最大公因数,欧几里得算法
- 相对路径和绝对路径
- 学习nodejs部分基础内容入门小结
- acm之Dinner
- 使用react native制作的一款网络音乐播放器
- Hadoop2.6.0 mac 安装
- 两个数求不能组合成的最大数
- HTML5复习 (13)
- 使用栈存储后缀表达式
- 激光SLAM导航系列(三)Costmap(代价地图)(上)
- 设计模式——状态模式
- 我编写了一个怪物 —— “消沉的程序员”漫画赏析
- 迭代器(Iterator)
- HTML页面跳转的5种方法
- 动态规划:求一个序列的最大子序列和