WUSTOJ 1269: 划分数

参考博客

果7的博客

题目

  将 1 个数 n 分成 m 份,求划分的种数。更多内容点击标题。

分析

  唯一需要注意的地方是不考虑顺序。其他的直接看代码即可。

代码

/**
* 用时:1320ms
* @author PengHao
* @version A1.0
* @date 2019年4月18日 下午9:40:56
*/ import java.util.Scanner; public class Main { private Scanner sc;
private int n, m; // 整数n,分成m份
private int count; // 种数 public Main() {
sc = new Scanner(System.in);
while (sc.hasNext()) {
n = sc.nextInt();
m = sc.nextInt();
count = 0; // 计数
divide(n, m, 1);
System.out.println(count);
}
sc.close();
} /**
* 划分
*
* @param a 整数
* @param b 分成b份
* @param min 本次划分最小取值
*/
private void divide(int a, int b, int min) {
int max = a / b; // 本次划分的最大值
// i表示本次划分的数
for (int i = min; i <= max; i++) {
if (2 == b) {
count++; // 这是最后一次划分,直接加1
continue; // 进入循环
}
divide(a - i, b - 1, i); // 继续划分下一层
}
} public static void main(String[] args) {
new Main();
} }

  看完了?别嘚瑟。注意到用时没?用了1320ms。妈耶,一看不对劲,然后就搜到了参考博客,于是就用Java写了一遍(相对于【果7的博客】做了部分改进)。

  这个题是有递推公式的:count[i][j] = count[i - 1][j - 1] + count[i - j][j]。代码如下:

/**
* 用时:296ms
* @author PengHao
* @version A2.1
* @date 2019年4月18日 下午11:49:47
*/ import java.util.Scanner; public class Main { public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[][] count = new int[201][7];
count[1][1] = 1;
int min;
for (int i = 2; i <= 200; i++) {
min = i < 6 ? i : 6;
for (int j = 1; j <= min; j++) {
count[i][j] = count[i - 1][j - 1] + count[i - j][j];
}
}
int n, m;
while (sc.hasNext()) {
n = sc.nextInt();
m = sc.nextInt();
System.out.println(count[n][m]);
}
sc.close();
} }

代码补充

  1. Java申请空间之后,会有默认值的,int的默认值为0,因此不用像C/C++那样赋值为0
  2. 此代码全部都写在了main方法里面了,因为构造方法是有点占时间的。(不是我的习惯,我比较喜欢分开。)
  3. Java调用方法也是占时间的,取小方法Math.min(int a, int b)还是不用的好,毕竟此处的三目运算符也是很容易理解的。

1269: 划分数(Java)的更多相关文章

  1. JVM性能调优实践——JVM篇

    前言 在遇到实际性能问题时,除了关注系统性能指标.还要结合应用程序的系统的日志.堆栈信息.GClog.threaddump等数据进行问题分析和定位.关于性能指标分析可以参考前一篇JVM性能调优实践-- ...

  2. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  3. [Java编程思想-学习笔记]第4章 控制执行流程

    4.1  return 关键字return有两方面的用途:一方面指定一个方法结束时返回一个值:一方面强行在return位置结束整个方法,如下所示: char test(int score) { if ...

  4. android布局太深导致的 java.lang.StackOverflowError

    E/AndroidRuntime( 1900): java.lang.StackOverflowError E/AndroidRuntime( 1900):     at android.graphi ...

  5. Java和Flex整合报错(五)

    1.错误描述 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -help ...

  6. Java 学习札记(三)免安装版TomCat中tomcat6w.exe的运行

    1.使用环境 很多时候我们用的是官网的解压免安装版的Tomcat,相比安装Tomcat除了少了安装步骤以外还少了tomcat6w.exe运行所需要的环境变量,所以一般Java开发免安装版的已经足够使用 ...

  7. 20155207王雪纯 2016-2017-2 《Java程序设计》第六周学习总结

    20155207 2016-2017-2 <Java程序设计>第六周学习总结 教材学习内容总结 第10章 输入/输出 10.1 InputStream与OutputStream 10.1. ...

  8. 20155207 2016-2017-2 《Java程序设计》第九周学习总结

    20155207 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立 ...

  9. 20155207 2016-2017-2 《Java程序设计》第七周学习总结

    20155207 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 第13章 时间与日期 13.1 认识时间与日期 13.1.1 时间的度量 格林威治时间(GM ...

随机推荐

  1. js即时函数在异步回调中的运用

    在编程中我们会接触到循环和异步编程的情况,这时异步回调执行逻辑就会出现问题.我们用setTimeout来模拟异步的: for(var i=0;i<3;i++){ setTimeout(funct ...

  2. 如何利用awk计算文件某一列的平均值?

    [root@master yjt]# cat yjt.sh #!/bin/bash awk -v field="$1" '{sum+=$field; n++;}END {if (n ...

  3. MySQL 中视图和表的区别以及联系是什么?

    两者的区别: (1)视图是已经编译好的 SQL 语句,是基于 SQL 语句的结果集的可视化的表,而表不是. (2)视图没有实际的物理记录,而基本表有. (3)表是内容,视图是窗口. (4)表占用物理空 ...

  4. VS Code 使用技巧[转载]

    原文:VS Code 快捷键(VS Code Shortcuts.pdf) 常用 General 按 Press 功能 Function Ctrl + Shift + P,F1 显示命令面板 Show ...

  5. window 下 某个端口被占用

    window 下 某个端口被占用 1. 开始—->运行—->cmd,或者是window+R组合键,调出命令窗口: 2.输入命令:netstat -ano,列出所有端口的情况.在列表中我们观 ...

  6. c语言 GPS nmealib学习笔记

    .nmealib简介 nmealib是一个基于C语言的用于nmea协议的开源库.虽然nmea体积小巧,但是却具备了不少功能. 分析NMEA语句并把结果保存在合适的C语言结构体中. 除了解析NMEA语句 ...

  7. Java 8 Lambda表达式学习和理解

    Java 8 Lambda表达式和理解 说明:部分资料来源于网络 时间:20190704 Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性.Lambda 允许把函数作为一 ...

  8. React vs. Angular vs. Vue

    原文连接 历史 React是一个用于构建Web应用程序UI组件的JavaScript库. React由Facebook维护,许多领先的科技品牌在其开发环境中使用React. React被Faceboo ...

  9. Qt编写自定义控件46-树状导航栏

    一.前言 树状导航栏控件是所有控件中最牛逼最经典最厉害的一个,在很多购买者中,使用频率也是最高,因为该导航控件集合了非常多的展示效果,比如左侧图标+右侧箭头+元素前面的图标设置+各种颜色设置等,全部涵 ...

  10. python中 将数字转化为人民币的形式

    def fn(args): """ 将金额转化为人民币模式,带逗号分隔,保留小数点两位,四舍五入 :param args: :return: ""&q ...