毕业好几年了,对算法还是比較有兴趣,所以想又一次開始做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)的更多相关文章

  1. ZOJ ACM 1314(JAVA)

    昨天做了几个题目.过于简单,就不在博客里面写了. 1314这道题也比較简单,写出来是由于我认为在这里有一个小技巧,对于时间复杂度和空间复杂度都比較节省. 这个题目类似哈希表的求解.可是更简单.刚拿到题 ...

  2. ACM之Java速成(4)

    ACM中Java.进制转换 Java进制转换: 由于Unicode兼容ASCII(0-255),因此,上面得到的Unicode就是ASCII. java中进行二进制,八进制,十六进制,十进制间进行相互 ...

  3. ACM之Java速成(3)

    ACM中Java.大数处理 先上个代码: import java.math.*; import java.util.*; class Main{ public static void main(Str ...

  4. ACM之Java速成(2)

    acm中Java的应用 Chapter I. Java的优缺点各种书上都有,这里只说说用Java做ACM-ICPC的特点: (1) 最明显的好处是,学会Java,可以参加Java Challenge ...

  5. ACM中java的使用

    ACM中java的使用 转载自http://www.cnblogs.com/XBWer/archive/2012/06/24/2560532.html 这里指的java速成,只限于java语法,包括输 ...

  6. ACM之Java输入输出

    本文转自:ACM之Java输入输出 一.Java之ACM注意点 1. 类名称必须采用public class Main方式命名 2. 在有些OJ系统上,即便是输出的末尾多了一个“ ”,程序可能会输出错 ...

  7. ACM中java的使用 (转)

    ACM中java的使用 这里指的java速成,只限于java语法,包括输入输出,运算处理,字符串和高精度的处理,进制之间的转换等,能解决OJ上的一些高精度题目. 1. 输入: 格式为:Scanner ...

  8. ACM中Java的应用

    先说一下Java对于ACM的一些优点吧: (1) 对于熟悉C/C++的程序员来说Java 并不难学,两周时间基本可以搞定一般的编程,再用些时间了解一下Java库就行了.Java的语法和C++非常类似, ...

  9. ACM之Java技巧

    一.Java之ACM注意点 关于四舍五入 小数保留几位:  DecimalFormat df = new DecimalFormat("0.00"); String num = d ...

随机推荐

  1. NHibernate 慎用Session.Merge

    Session.Merge其意思有两个步骤, 一般用法: Session.Merge(obj); 1. 从当前的Session中获取obj对象, 如果未获取到则从数据库获取. 2. 把程序中的obj的 ...

  2. ldap数据库--ldapsearch,ldapmodify

    简单介绍一下ldapsearch命令,在ldap搜索条目时很有用,只要适当调整filter就可以. 命令如下: ldapsearch -h hostname -p port -b baseDN -D ...

  3. SmartAdmin(SmartAdmin_v1.5.2)

    SmartAdmin_v1.5.2是一个基于bootstrap上开发的页面设置,前后台数据交互和样式显示. 用过的例子有F:\SmartAdmin_v1.5.2\SmartAdmin_v1.5.2\D ...

  4. salesforce零基础学习(八十三)analytics:reportChart实现Dashboard(仪表盘)功能效果

    项目中经常会用到Report以及Dashboard来分析汇总数据,Dashboard可以指定view as user,如果针对不同的用户需要显示其允许查看的数据,比如  根据role hierarch ...

  5. [转载] Redis快速入门

    转载自http://www.yiibai.com/redis/redis_quick_guide.html Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序 ...

  6. Python之Queue模块

    Queue 1.创建一个“队列”对象 >>> import Queue >>> queue = Queue.Queue(maxsize=100) >>& ...

  7. Upgrading an ASP.NET MVC 2 Project to ASP.NET MVC 3 Tools Update

    ASP.NET MVC 3 can be installed side by side with ASP.NET MVC 2 on the same computer, which gives you ...

  8. PHP Xdebug安装及配置

    1.首先在官方网站下载dll文件; Xdebug官方网站 2.将php_xdebug.dll文件放入php/ext文件夹下; 3.编辑php.ini,在文件最后加入如下代码: ; Xdebug zen ...

  9. python paramiko模块 用密钥传输

    VM_129_78_suse:/home/remote_paramiko # cat remote.py #!/usr/bin/env python import paramiko linux_cmd ...

  10. ZZCMS8.1|代码审计

    这周的审计任务 ZZCMS8.1是站长招商网内容管理系统.审计这个CMS的原因很多,这里就不详说了(其实是漏洞类型多点)                                         ...