ZOJ ACM 1204 (JAVA)
毕业好几年了,对算法还是比較有兴趣,所以想又一次開始做ACM题。俺做题比較任意,一般先挑通过率高的题来做。
第1204题,详细描写叙述请參考,ZOJ ACM 1204
1)难度分析
这个题目,基本的难度在于要依据长度来排序。
比方1 2 3 4 5 6。结果必须为:
1+2=3
1+3=4
1+4=5
1+5=6
2+3=5
2+4=6
1+2+3=6
可是我的结果为:
1+2=3
1+2+3=6
1+3=6
。。。
2)解决方法
将结果缓存,依据长度排序后再打印。
3)AC的源代码。假设要直接提交,请将中文凝视删除。
import java.util.Collections;
import java.util.Comparator; public class Main {
static int lineNumber;
static int input[];
static int M = 4;
static boolean hasR = false;
static java.util.ArrayList<int []> results; public static void main(String[] args) {
<span style="white-space:pre"> </span>//排序算法重写
Comparator<int []> comparator = new Comparator<int []>(){
public int compare(int []r1, int []r2) { if(r1[0] != r2[0]){
return r1[0]-r2[0];
}
else {
return 0;
}
}
}; java.util.Scanner scanner = new java.util.Scanner(System.in); if(scanner.hasNext()) {
lineNumber = Integer.parseInt(scanner.nextLine());
}
int lineIndex = 0;
while(scanner.hasNext()) {
lineIndex++;
hasR = false; String lineStr = scanner.nextLine(); String strs[] = lineStr.split(" ");
M = Integer.parseInt(strs[0]);
input = new int[M];
results = new java.util.ArrayList<int []>(); for(int j=0; j<M;j++) {
input[j] = Integer.parseInt(strs[j+1]);
}
java.util.Arrays.sort(input); //<span style="font-family: Arial, Helvetica, sans-serif;">//说明:比較关键,由于一開始没有注意看题,没有考虑输入的一行数字可能是无序的,直接依照升序处理。</span> fn(0,0,0,new int[33]); if(hasR == false) {
System.out.println("Can't find any equations.");
} else {
Collections.sort(results,comparator); for(int i = 0;i<results.size();i++) {
int count = results.get(i)[0];
for(int j=1;j<=count;j++) {
System.out.print(results.get(i)[j]);
if(j<count){
System.out.print("+");
}
}
System.out.println("="+results.get(i)[count+1]);
}
} System.out.println("");
if(lineIndex == lineNumber) {
break;
}
}
} public static long fn(int i, int sum, int count, int[] res) {
long r; if(i==M)return -1;
if(sum >input[M-1]) return -1; //说明:比較关键。直接决定了算法的时间复杂度,没有这个推断。计算超时。 if (sum == input[i]) {
hasR = true;
res[count+1] = sum;
results.add(res);
} if (i < M - 1) {
int res_new[] = new int[33];
for (int k = 0; k <= count + 1; k++) {
res_new[k] = res[k];
}
res_new[0] = count + 1;
res_new[count + 1] = input[i];
fn(i + 1, sum + input[i], count + 1, res_new); fn(i + 1, sum, count, res);
} return -1; }
}
ZOJ ACM 1204 (JAVA)的更多相关文章
- ZOJ ACM 1314(JAVA)
昨天做了几个题目.过于简单,就不在博客里面写了. 1314这道题也比較简单,写出来是由于我认为在这里有一个小技巧,对于时间复杂度和空间复杂度都比較节省. 这个题目类似哈希表的求解.可是更简单.刚拿到题 ...
- ACM之Java速成(4)
ACM中Java.进制转换 Java进制转换: 由于Unicode兼容ASCII(0-255),因此,上面得到的Unicode就是ASCII. java中进行二进制,八进制,十六进制,十进制间进行相互 ...
- ACM之Java速成(3)
ACM中Java.大数处理 先上个代码: import java.math.*; import java.util.*; class Main{ public static void main(Str ...
- ACM之Java速成(2)
acm中Java的应用 Chapter I. Java的优缺点各种书上都有,这里只说说用Java做ACM-ICPC的特点: (1) 最明显的好处是,学会Java,可以参加Java Challenge ...
- ACM中java的使用
ACM中java的使用 转载自http://www.cnblogs.com/XBWer/archive/2012/06/24/2560532.html 这里指的java速成,只限于java语法,包括输 ...
- ACM之Java输入输出
本文转自:ACM之Java输入输出 一.Java之ACM注意点 1. 类名称必须采用public class Main方式命名 2. 在有些OJ系统上,即便是输出的末尾多了一个“ ”,程序可能会输出错 ...
- ACM中java的使用 (转)
ACM中java的使用 这里指的java速成,只限于java语法,包括输入输出,运算处理,字符串和高精度的处理,进制之间的转换等,能解决OJ上的一些高精度题目. 1. 输入: 格式为:Scanner ...
- ACM中Java的应用
先说一下Java对于ACM的一些优点吧: (1) 对于熟悉C/C++的程序员来说Java 并不难学,两周时间基本可以搞定一般的编程,再用些时间了解一下Java库就行了.Java的语法和C++非常类似, ...
- ACM之Java技巧
一.Java之ACM注意点 关于四舍五入 小数保留几位: DecimalFormat df = new DecimalFormat("0.00"); String num = d ...
随机推荐
- sublime 集成git插件,及git常用命令
以前用了很久的totoiseSVN,显然不够高大上,开发界的版本装x利器还得是git.然而git的命令行对没怎么用过linux的人可能觉得还不如用gitGUI,可是当你知道sublime可以集成git ...
- 【基础】Attribute的妙用
一.何为Attribute 下面是微软官方对Attribute的解释: 公共语言运行时允许你添加类似关键字的描述声明,叫做Attributes,它对程序中的元素进行标注,如类型.字段.方法和属性等.A ...
- 掌握numpy(三)
统计功能 前面都是介绍numpy的一些特性,被称为数学运算神器怎么能少了统计功能呢 ndarray的方法 a = np.array([[-2.5, 3.1, 7], [10, 11, 12]]) &g ...
- RabbitMQ消息队列系列教程(一)认识RabbitMQ
摘要 RabbitMQ是最为流行的消息中间件,是处理高并发业务的利器.本系列教程,将跟大家一起学习RabbitMQ. 目录 RabbitMQ是什么? RabbitMQ的特点是什么? 一.RabbitM ...
- git命令提交项目
相关的操作命令,总是忘记,故在此记录下: 此为linux下的命, windows的话,去掉sudo即可 1.进入项目代码根目录,执行: sudo git init 把这个目录变成git可以管理的仓库. ...
- Winform界面中实现菜单列表的动态个性化配置管理
在我们一般的应用系统里面,由于系统是面向不同类型的用户,我们所看到的菜单会越来越多,多一点的甚至上百个,但是我们实际工作接触的菜单可能就是那么几个,那么对于这种庞大的菜单体系,寻找起来非常不便.因此对 ...
- hive Beeline plus HiveServer2简单使用
HiveServer2是经常与beeline一起使用,可以用jdbc客户端远程连接,一般用于生产环境. 在提供传统客服端的功能之外,还提供其他功能: Beeline连接 1.先在hadoop集群启动H ...
- 八、VueJs 填坑日记之参数传递及内容页面的开发
我们在上一篇博文中,渲染出来了一个列表,并在列表中使用了router-link标签,标签内的:to就是链接地址,昨天咱们是<router-link :to="'/content/' + ...
- phpcms v9 前台getshell脚本
phpcms v9 前台getshell脚本 用法:python phpcmsv9getshell.py http://baidu.com # -*- coding:utf-8 -*- ''' --- ...
- P2051 [AHOI2009]中国象棋
题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法.大家肯定很清楚,在中国象棋中炮的行走方式是 ...