/*历届试题 买不到的数目
时间限制:1.0s 内存限制:256.0MB
问题描述
小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。
你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。
本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。
输入格式
两个正整数,表示每种包装中糖的颗数(都不多于1000)输出格式
一个正整数,表示最大不能买到的糖数样例输入1
4 7
样例输出1
17
样例输入2
3 5
样例输出2
7*/
1.用队列的思想
- 我的代码:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static int n,m;
public static int a[][] ;
public static ArrayList<Integer> al = new ArrayList<>();
public static void main(String[] args) {
Scanner sca = new Scanner(System.in);
n = sca.nextInt();
m = sca.nextInt();
a = new int[n + 1][ m + 1];
int sum = 0;
int max;
if(n < m) {
max = n;
}
else {
max = m;
}
for(int i = 0;i <= m;i ++) {
for(int j = 0;j <= n; j ++) {
al.add(n * i + m * j);
// System.out.println(al);
}
}
int t = al.size();
int at[] = new int[al.size()];
for(int i = 0;i < t;i ++) {
at[i] = al.get(i);
}
Arrays.sort( at);
/* for(int x:at) {
System.out.println(x);
}*/
for(int i = max ; i <= n * m; i ++) {
if(at[i + max -1] == at[i] + max - 1) {
System.out.println(at[i] - 1);
break;
}
}
}
}
- 解题思路:当出现(max)m,n中的一个最小数个连续的数可以买到时,后面所有情况都可以买到。所以在此数之前的一个数就是最大买不到数目
- 时间空间花费:
2.优化的动态规划方法:
- 我的代码
/**
*@author 杨雨婷
*@date 2019年5月9日
*/
package 买不到的数目;
import java.util.Scanner;
public class Main2 {
static int a[];
static int n,m;
public static void main(String[] args) {
Scanner sca = new Scanner(System.in);
n = sca.nextInt();
m = sca.nextInt();
int min = min(n, m);
int mn = n * m;
a = new int[mn + 1];
//标记
for(int i = 0; i < m; i ++) {
for(int j = 0; j < n; j ++) {
int t = n * i + m * j;
if(t <= n * m) {
a[t] = 1;
}
}
}
//连续出现min个可以实现的数就结束
int t = min;
int num = 0;
for(int i = 0; i <= mn; i ++) {
//System.out.println(i + ":" + a[i]);
if(a[i] == 1) {
num ++;
if(num == min) {
System.out.println(t);
return;
}
}
else {
num = 0;
t = i;
}
}
}
private static int min(int n2, int m2) {
if(n2 > m2) {
return m2;
}
return n2;
}
}
- 测试结果:
23 34
725
- 时间空间花费:
3.看清题目可知,包装的糖果最大为1000,所以可以直接开空间为10001.就更简化了思路