/*
一個淘寶的訂單中包含n(10>=n>=1)種商品A1,A2,...,An,每種商品數量分別爲a1,a2,...,an個,記做{a1,a2,...,an}(ak>0)。訂單在倉庫生產過程中,倉庫爲了提升作業效率,會提前對熱門組合商品進行預包裝。假設這n個商品有m(9>=m>=1)個商品組合,每個組合bomk包含A1,A2,...,An的數量分別爲{b1,b2,...,bn}(bk>=0,至少存在一個bk>0)
舉例如下:
訂單包含A,B,C商品,數量爲{2,3,1},商品組合bom1{2,1,1},bom2{1,1,0},bom3{0,1,1}
對以上訂單匹配給定商品組合,得到的可能匹配結果爲:res1.匹配到組合1一套,剩餘B商品;res2.匹配到組合2兩套,組合3一套,不剩商品;
現要求訂單的最優匹配,最優匹配的原則爲:1.匹配組合後,剩餘商品種類數越少越好;2.在剩餘商品種類數相同的情況下,匹配到的組合種類數越少越好;
例如上面例子,我們認爲res2優於res1。
現需要編寫程序,輸入格式爲:
n,m
a1,a2,...,an
bom1,b11,b12,...,b1n
bom2,b21,b22,...,b2n
....
bomm,bm1,bm2,...,bmn
輸入數據的格式說明(數據間使用英文逗號分隔):
第一行數據:n個商品,m個預包方案
第二行數據:商品1個數,商品2個數,。。。,商品n個數
第三行數據:bom1,商品1個數,商品2個數,。。。,商品n個數
第n-1行數據:。。。。
第n行數據:bomn,商品1個數,商品2個數,。。。,商品n個數
針對輸入數據找出最優匹配,輸出最優匹配的組合及套數,比如針對上面的例子輸出:
match result:
bom2*2,bom3*1
注:輸出結果有多個時可以亂序
已輸入字數: 1562 / 10000 運行 編程說明 -
編譯器版本: Java 1.8.0_66
請使用標準輸入輸出(System.in, System.out);已禁用圖形、文件、網絡、系統相關的操作,如java.lang.Process , javax.swing.JFrame , Runtime.getRuntime;不要自定義包名稱,否則會報錯,即不要添加package answer之類的語句;您可以寫很多個類,但是必須有一個類名爲Main,並且爲public屬性,並且Main爲唯一的public class,Main類的裏面必須包含一個名字爲'main'的靜態方法(函數),這個方法是程序的入口
時間限制: 3S (C/C++以外的語言爲: 5 S) 內存限制: 128M (C/C++以外的語言爲: 640 M)
輸入:
輸入數據的格式說明(數據間使用英文逗號分隔): 第一行數據:n個商品,m個預包方案 第二行數據:商品1個數,商品2個數,。。。,商品n個數 第三行數據:bom1,商品1個數,商品2個數,。。。,商品n個數 第n-1行數據:。。。。 第n行數據:bomn,商品1個數,商品2個數,。。。,商品n個數
輸出:
輸出最優匹配的組合及套數
輸入範例:
3,3
2,3,1
bom1,2,1,1
bom2,1,1,0
bom3,0,1,1
輸出範例:
match result:
bom2*2
bom3*1
*/
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class Main {
/** 請完成下面這個函數,實現題目要求的功能 **/
/** 當然,你也可以不按照這個模板來作答,完全按照自己的想法來 ^-^ **/
public static void main(String[] args) {
List<Integer> order = new ArrayList<Integer>();
Map<String, List<Integer>> boms = new HashMap<String, List<Integer>>();
Scanner in = new Scanner(System.in);
String line = in.nextLine();
Integer n = Integer.parseInt(line.split(",")[0]);
Integer m = Integer.parseInt(line.split(",")[1]);
line = in.nextLine();
String[] itemCnt = line.split(",");
for(int i = 0; i < n ; i++){
order.add(Integer.parseInt(itemCnt[i]));
}
for(int i = 0; i < m; i++){
line = in.nextLine();
String[] bomInput = line.split(",");
List<Integer> bomDetail = new ArrayList<Integer>();
for(int j = 1; j <= n; j++ ){
bomDetail.add(Integer.parseInt(bomInput[j]));
}
boms.put(bomInput[0], bomDetail);
}
in.close();
Map<String, Integer> res = resolve(order, boms);
System.out.println("match result:");
for(String key : res.keySet()){
System.out.println(key+"*"+res.get(key));
}
}
// write your code here
public static Map<String, Integer> resolve(List<Integer> order, Map<String, List<Integer>> boms) {
Map<String, Integer> map=new HashMap<String, Integer>();
return map;
}
}