plan for aphinier

来源:互联网 发布:开淘宝店卖虚拟物品 编辑:程序博客网 时间:2024/05/19 10:41
import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;public class Selection {int maxValue = -1;int timeLen = 20;final int areaNum = 6;double[] areaValues = {1.0, 0.8, 0.75, 0.5, 0.3, 0.2 };// input split by ","public Content parse(String s) {String[] items = s.split(",");Content content = new Content();content.id = Integer.valueOf(items[0]);content.startTime = Integer.valueOf(items[1]);content.length = Integer.valueOf(items[2]);content.value = Integer.valueOf(items[3]);return content;}public HashMap<Integer, ArrayList<Content>> buildSchedule(ArrayList<Content> list) { // 1个area的scheduleHashMap<Integer, ArrayList<Content>> map = new HashMap<Integer, ArrayList<Content>>();for (Content c : list) {for (int i = c.startTime; i < c.startTime + c.length; i++) {if (map.containsKey(i)) {map.get(i).add(c);} else {ArrayList<Content> newList = new ArrayList<Content>();newList.add(c);map.put(i, newList);}}}return map;}public ArrayList<HashMap<Integer, ArrayList<Content>>> buildEntry(ArrayList<ArrayList<Content>> singleSchedule) { // 建立1组6个area的scheduleArrayList<HashMap<Integer, ArrayList<Content>>> entry = new ArrayList<HashMap<Integer, ArrayList<Content>>>();for (ArrayList<Content> list : singleSchedule) {entry.add(buildSchedule(list));}return entry;}public ArrayList<Content> selectForAll(ArrayList<HashMap<Integer, ArrayList<Content>>> entry, int time) {ArrayList<Content> result = new ArrayList<Content>();ArrayList<Content> list = new ArrayList<Content>();HashSet<Integer> hasSelected = new HashSet<Integer>();select(list, result, entry, hasSelected, 0, time, 0);return result;}public void select(ArrayList<Content> list, ArrayList<Content> result,ArrayList<HashMap<Integer, ArrayList<Content>>> entry,HashSet<Integer> hasSelected, int pos, int time, int tempValue) {if (list.size() == areaNum) {if (tempValue > maxValue || maxValue == -1) {result = new ArrayList<Content>(list);return;}}for (int i = pos; i < areaNum; i++) {HashMap<Integer, ArrayList<Content>> map = entry.get(i);if (map.containsKey(time)) {ArrayList<Content> contentList = map.get(time);if (contentList.size() == 1) {if (!hasSelected.contains(contentList.get(0))) {result.add(contentList.get(0));}} else {for (int j = 0; j < contentList.size(); j++) {Content c = contentList.get(j);if (!hasSelected.contains(c.id)) {list.add(c);tempValue += areaValues[i] * c.value;hasSelected.add(c.id);select(list, result, entry, hasSelected, pos + 1,time, tempValue);list.remove(list.size() - 1);tempValue -= areaValues[i] * c.value;hasSelected.remove(c.id);}}}}}}public ArrayList<Content> selectGreedy(ArrayList<HashMap<Integer, ArrayList<Content>>> entry,HashSet<Integer> hasSelected, int time) {ArrayList<Content> result = new ArrayList<Content>();for (int i = 0; i < areaNum; i++) {Content maxContent = null;HashMap<Integer, ArrayList<Content>> map = entry.get(i);if (map.containsKey(time)) {ArrayList<Content> contentList = map.get(time);if (contentList.size() == 1) {if (!hasSelected.contains(contentList.get(0))) {result.add(contentList.get(0));}} else {for (int j = 0; j < contentList.size(); j++) {if (!hasSelected.contains(contentList.get(j))) {Content c = contentList.get(j);if (c.value > maxContent.value|| maxContent == null) {maxContent = c;}}}result.add(maxContent);}}}return result;}public void main(String[] args) {ArrayList<ArrayList<String>> allSche = new ArrayList<ArrayList<String>>();Content c = parse("1,5,10,90");}}

0 0
原创粉丝点击