在boss上面,一位大boss给我出的题目,自己没答出来,机会是留给有准备的人,看来不是给我准备着,虽然自己最近才刚刚学习了动态规划,但是能力还是差很多,下面进入正文。

这个问题我第一个想到的就是m个苹果放入n个篮子,苹果和篮子都一样,篮子不能为空。

这就和走棋盘问题和杨辉三角类似咯。

算法一:求解出一共有多少种可能性:

解法1:

public static void main(String[] args) {//int m = 5;int[][] number = new int[m+1][m+1];//m个苹果放在一个篮子里面只有一种for(int i =0;i<m+1;i++){number[i][1] = 1;}for(int i=1;i<m+1;i++){for(int j=2;j<i+1;j++){//既然篮子都不能为空,分两种情况,篮子最少的苹果数量为1;篮子最少的苹果数量起码是2。这两种情况去分析number[i][j] = number[i-1][j-1]+number[i-j][j];}}int sum = 0;for(int j=1;j<m+1;j++){sum+=number[m][j];}System.out.println(sum);}

解法2:

n = int(input())dp = [[0 for i in range(n+1)] for j in range(n+1)]
for i in range(n+1):dp[i][i] = 1for i in range(1,n+1):for j in range(i-1, 0, -1):dp[i][j] = dp[i-j][j] + dp[i][j+1]print("dp[{}][{}]={}".format(i,j,dp[i][j]))#print(dp)
print("result is {}".format(dp[n][1]))

dp[i][j]表示的是总和为i,然后最小值大于等于j的组合,dp[i][j+1]表示的是总和为i,最小值大于等于j+1的组合,然后j+dp[i-j][j]表示总和为i,最小值等于j的组合。

“显然”前者可以由后两者计算得出。

显然吧?不懂就多读几遍,用笔写下来看看,就明白了。

算法二:输出所有的可能性:

n = int(input())dp = [[[] for i in range(n+1)] for j in range(n+1)]
for i in range(n+1):dp[i][i] = ["{}".format(i)]for i in range(1,n+1):for j in range(i-1, 0, -1):dp[i][j] = ["{}+{}".format(j, xx) for xx in dp[i-j][j]] + dp[i][j+1]#print("dp[{}][{}]={}".format(i,j,dp[i][j]))#print(dp)
print("result is {}".format(dp[n][1]))

把一个数分解成任意几个数的和,把所有的可能性列出来。相关推荐

  1. 把一个数分解成任意几个数之和,打印所有和式分解的结果

    题目:把一个数分解成任意几个数之和,把一个数的所有和式分解的结果全部输出出来, 例如:4的结果有,(1+3),(2+2),(1+1+2),(1+1+1+1) 由例子可见,该程序是去重的,应为1+1+2 ...

  2. 把一个数分解成任意几个数的和,把所有的可能性列出来

    把一个数分解成任意几个数的和,把所有的可能性列出来 4=1+3 4=2+2 4=1+1+2 4=1+1+1+1 类似于有4个苹果放入n个篮子 通过创建二维数组将数字分别放进去 分别考虑 当都为一的情况 ...

  3. 把一个数分解成任意几个数之和全部结果

    package com.codser;import java.util.HashSet;public class App {/*** 临时的构建内部类*/static class Construct{ ...

  4. 面试经典算法-将大于2的某一个数分解成两个素数之和

    将大于2的某一个数分解成两个素数之和 [面试题]输入一个大于2的偶数n,将n分解成为两个素数之和,有几对就输出几对.(注意 :1 不是素数) #include <stdio.h>/*子算法 ...

  5. JS:利用函数,求任意三个数最大值,任意两个数的任意运算结果,判断任意数值是否为素数。

    1.求任意三个数最大值 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  6. 简单算法:把一个数分解成几个数之和

    小白记录,大佬勿喷!! /**分析2 1+1:3 1+2,1+1+14 1+3,2+2,1+1+2,1+1+1+15 1+4,2+3,1+1+3,1+2+2,1+1+1+2,1+1+1+1+16 1+ ...

  7. 著名的斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到: 1, 1, 2, 3, 5, 8, 13, 21, 34, ...

    def fib(max):n, a, b = 0, 0, 1while n < max:print(b)a, b = b, a + bn = n + 1return 'done' 注意,赋值语句 ...

  8. php算法求出一个数可以被分解成多少个_小学奥数必须掌握的30个知识模块汇总...

    关注成长教育  解决学习困惑 点击蓝字关注,与全国家长比肩同行 1.和差倍问题和差问题 和倍问题 差倍问题已知条件 几个数的和与差 几个数的和与倍数 几个数的差与倍数公式适用范围 已知两个数的和,差, ...

  9. php算法求出一个数可以被分解成多少个_最全的小学干货:34个数学重难点公式(三)...

    1.和差倍问题: 和差问题 和倍问题 差倍问题 已知条件 几个数的和与差 几个数的和与倍数 几个数的差与倍数 公式适用范围 已知两个数的和,差,倍数关系 公式 ①(和-差)÷2=较小数 较小数+差=较 ...

最新文章

  1. R可视化包ggplot2修改可视化图像的字体大小
  2. 网页性能优化03-函数防抖
  3. python线性输出_python sklearn-02:线性回归简单例子1
  4. IIS服务器绑定域名问题
  5. CSS鼠标悬停隐藏展开简介特效
  6. div css将文字居中显示图片,css文字居中、图片居中、div居中解决方案
  7. linux网络防火墙-iptables基础详解
  8. istio入门与实战 pdf 下载_Istio实战指南 PDF 下载
  9. 随机信号分析基础——例题篇(例题3.4)
  10. C盘里的HTML是什么文件,C盘Windows下的winsxs是什么文件可以删除吗
  11. Java反射之Method对象详解
  12. 创业公司做数据分析(一)开篇
  13. 实验二:MCMC训练的深度学习
  14. Vortex: 一种基于RISC-V指令集自定义扩展的开源GPGPU架构
  15. linux定时执行sh文件
  16. 获取猫眼电影所有城市信息2
  17. make_layers 作用
  18. C语言中 真值/原码/补码/反码 的概念
  19. 关于MapGIS打印的解决方案_map2shp_新浪博客
  20. 磁盘分区的4K对齐(转载)

热门文章

  1. 【Python基础】实验——Lab 1 Python编程基础
  2. hdu 5465 Clarke and puzzle (二维树状数组+nim博弈)
  3. 红杉资本张帆:钟情本土创投的华尔街猎手
  4. 高考录取计算机专业对英语要求,高考英语成绩差,这6个专业不适合报考,对外语能力要求很高...
  5. 异常错误报告 -MINIDump ZIB 发送
  6. 【Dynamo】如何学习Dynamo可视化编程?
  7. 涂鸦智能物联网平台初探
  8. STM32对接涂鸦wifi模块项目记录(智能插座完善版本)
  9. 怎么压缩mp4视频大小,视频压缩不用愁
  10. 新一批电子商务解决方案和企业管理应用加入 VM Depot 中国站点