| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
BFS 猥琐搞定,5772K,1969MS。网上把这道题目归到DP,自己DP不好,想不出来怎么递归,背包做了快一周,老觉得这道题目靠不到背包那种情况。到网上看了解题报告。拿着别人的代码步调理解意思,发现做的就是BFS的事情。。。。。。个人理解上,也觉得如果把这道题目归到BFS上面,理解起来会容易点。附上自己的代码,写的相当菜,大家尽管喷。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
//import java.io.PrintStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
//BFS + hash
//2012.12.6 16:00-22.16
public class Main{
public static int nArm, nWeight;
public static int MAX_NUM= 21;
public static int[] armLen, weights;
public static int MAX_STATUS = 0;
public static void main(String args[]){
//输入重定向
// try {
// System.setIn(new FileInputStream("G:/Java_workspace/acm_pku/bin/inputs/P1837input.txt"));
//// System.setOut(new PrintStream("G:/Java_workspace/acm_pku/bin/inputs/P1061output.txt"));
// } catch (FileNotFoundException e) {
// System.out.println("redirect error");
// e.printStackTrace();
// }
Scanner in= new Scanner(System.in);
int i,j;
while(in.hasNextInt()){
nArm = in.nextInt();
nWeight = in.nextInt();
// System.out.println("nArm="+nArm+" nWeight="+nWeight);
armLen = new int[MAX_NUM+1];
weights = new int[MAX_NUM+1];
for( i = 1; i <= nArm; i++){
armLen[i]= in.nextInt();
}
// printout("armLen",armLen);
for( i = 1; i <= nWeight; i++){
weights[i]= in.nextInt();
}
HashMap<Integer, Integer> map1 = new HashMap<Integer, Integer>();
HashMap<Integer, Integer> map2 = new HashMap<Integer, Integer>();
map1.put(MAX_STATUS, 1);
// printmap(map1);
for(i=1;i<=nWeight;i++){
Iterator iter = map1.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
Integer key = (Integer)entry.getKey();
Integer val = (Integer)entry.getValue();
for(j=1;j<=nArm;j++)
{
int newpos = key+weights[i]*armLen[j];
if(map2.containsKey(newpos)){
int oldval = map2.get(newpos);
map2.put(newpos, oldval+val);
}
else map2.put(newpos, val);
}
}
map1 = map2;
// printmap(map1);
map2 = new HashMap<Integer, Integer>();
}
// printmap(map1);
if(map1.containsKey(MAX_STATUS))
System.out.println(map1.get(MAX_STATUS));
else System.out.println(0);
}
}
// private static void printmap(HashMap<Integer, Integer> map) {
// Iterator iter = map.entrySet().iterator();
// while (iter.hasNext()) {
// Map.Entry entry = (Map.Entry) iter.next();
// Integer key = (Integer)entry.getKey();
// Integer val = (Integer)entry.getValue();
// System.out.print(key+" "+val+";");
// }
// System.out.println();
//
// }
// private static void printout(String s, int[] res) {
// if(res==null){
// System.out.println("null");
// return;
// }
// System.out.print(s+" len="+ res.length+" ");
// for(int i=0;i<res.length; i++)
// System.out.print(res[i]+" ");
// System.out.println();
// }
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator