2014
03-03

# Allergy Test

A test for allergy is conducted over the course of several days, and consists of exposing you to dierent substances (so called allergens). The goal is to decide exactly which of the allergens you are allergic to. Each allergen has a live duration D measured in whole days, indicating exactly how many days you will suer from an allergic reaction if you are allergic to that particular substance. An allergic reaction starts to show almost immediately after you have been exposed to an allergen which you are allergic to. The test scheme has two action points per day:
I At 8 o’clock each morning, at most one of the allergens is applied to your body.
II At 8 o’clock each evening, you are examined for allergic reactions.

Thus an allergen with live duration D will aect exactly D allergic reaction examinations.

Of course, if you have two or more active allergens in your body at the time of an observed reaction, you cannot tell from that information only, which of the substances you are allergic to.

You want to find the shortest possible test scheme given the durations of the allergens you want to test. Furthermore, to allow simple large scale application the test scheme must be non-adaptive, i.e. the scheme should be fixed in advance. Thus you may not choose when to apply an allergen based on the outcome of previous allergic reaction examinations.

The first line of the input contains a single integer k (1 <= k <= 20) specifying the number of allergens being tested for. Then follow k lines each containing an integer D (1 <= D <= 7) specifying the live duration of each allergen.

The first line of the input contains a single integer k (1 <= k <= 20) specifying the number of allergens being tested for. Then follow k lines each containing an integer D (1 <= D <= 7) specifying the live duration of each allergen.

3
2
2
2
5
1
4
2
5
2

5
10

import java.io.BufferedReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Main {
//how many of type 1...7, then length of last free. stores min test day
static Map<Key, Integer> dp;
static int MAX = 141;
public static void main(String[] args) throws Exception{
PrintWriter out = new PrintWriter(System.out);

for(int t = 0; t < T ; t++){
dp = new HashMap<Key, Integer>();
int[] state = new int[8];
for(int i = 0; i < k; i++){
}

int min = MAX;
for(int free = 1; free <= 7; free++){
state[0] = free;
min = Math.min(min, solve(new Key(state)));
}
out.println(min);
}

out.close();
}

static int solve(Key key){
if(dp.get(key) != null){
return dp.get(key);
}

int sum = 0;
List<Integer> nonzero = new ArrayList<Integer>();

int sfree = key.state[0];

for(int i = 1; i <= 7; i++){
sum += key.state[i];
}

if(sum == 1){
if(sfree == nonzero.get(0)){
return sfree;
}else{
return MAX;
}
}

int min = MAX;
for(int i = 0; i < nonzero.size(); i++){
int lastL = nonzero.get(i);
if(lastL < sfree) continue;
for(int free = 1; free <= 7; free++){
if(lastL > sfree + free - 1) continue;
Key nextKey = new Key(key.state.clone());
nextKey.state[lastL]--;
nextKey.state[0] = free;
int ans = solve(nextKey) + sfree;
min = Math.min(ans,  min);
}
}

dp.put(key, min);

return min;
}

static class Key{
public int[] state;

public Key(int[] state){
this.state = state;
}

@Override
public boolean equals(Object other){
return Arrays.equals(this.state, ((Key)other).state);
}

@Override
public int hashCode(){
return Arrays.hashCode(state);
}

}
}

1. 第2题，TCP不支持多播，多播和广播仅应用于UDP。所以B选项是不对的。第2题，TCP不支持多播，多播和广播仅应用于UDP。所以B选项是不对的。

2. Good task for the group. Hold it up for every yeara??s winner. This is a excellent oppotunity for a lot more enhancement. Indeed, obtaining far better and much better is constantly the crucial. Just like my pal suggests on the truth about ab muscles, he just keeps obtaining much better.