| ||||||||||
| 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 | |||||||||
Re:Java 水过,是参考网上的代码的In Reply To:Java 水过,是参考网上的代码的 Posted by:HeartLC at 2013-04-11 12:14:09 import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class Main{
private static int Mleft;
private static int M;
private static int maxM;
private static int minM;
private static int N;
private static HashMap<Integer,Integer[]> goods=new HashMap<Integer,Integer[]>();//<price,level>
private static HashMap<Integer,HashMap<Integer,Integer>> replaces=new HashMap<Integer,HashMap<Integer,Integer>>();//<number,<index,discount>>
public static void main(String[] args) throws IOException{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String[] temps0=reader.readLine().split(" ");
M=Integer.parseInt(temps0[0]);
N=Integer.parseInt(temps0[1]);
for(int i=0;i<N;i++){
String[] temps=reader.readLine().split(" ");
if(temps.length==3){
goods.put(i, new Integer[]{Integer.parseInt(temps[0]),Integer.parseInt(temps[1]),Integer.parseInt(temps[2])});
HashMap<Integer,Integer> tempReplace=new HashMap<Integer,Integer>();
for(int j=0;j<Integer.parseInt(temps[2]);j++){
String[] temps2=reader.readLine().split(" ");
if(temps2.length==2){
tempReplace.put(Integer.parseInt(temps2[0]), Integer.parseInt(temps2[1]));//number,discount
}
}
replaces.put(i, tempReplace);
}
}
System.out.println(DS(0));
}
//深度搜索
private static int DS(int index) {
int level=goods.get(index)[1];
int min=goods.get(index)[0];
int tryMin=min;
try{
Set<Integer> key = replaces.get(index).keySet();
Iterator<Integer> it=key.iterator();
while(it.hasNext()){//遍历所有替代品,如果更改第一个替代品,则重置权限范围
if(index==0){
Mleft=M;
maxM=level;
minM=level;
}
int number=it.next()-1;
int levl=goods.get(number)[1];
int discount=replaces.get(index).get(number+1);
if(maxM<levl||minM>levl){
Mleft-=Math.abs(levl-level);
if(Mleft>=0&&levl>level)
maxM=levl;
else if(Mleft>=0)
minM=levl;
}
if(Mleft>=0){
if(number>index)//限制环
tryMin=discount+DS(number);
}
else
Mleft+=Math.abs(levl-level);
min=tryMin<min?tryMin:min;
}
}catch(Exception e){
return index;
}
return min;
}
}
同JAVA水过,握手
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator