| 
 | 
back to boardjava AC 1st place Posted by  esbybb 12 Jul 2015 09:59 package timus;   import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.util.Arrays; import java.util.StringTokenizer;   public class p1167 {     static int a[], totals[];     static int h, s;     static int min = Integer.MAX_VALUE;     public static void main(String[] args) throws FileNotFoundException {         InputStream is = System.in; //        is = new FileInputStream(new File("A.txt"));         FastScanner sc = new FastScanner(new InputStreamReader(is));         h = sc.nextInt();         s = sc.nextInt();         int k[] = new int[h];         for (int i=0; i<h; i++) {             k[i] = sc.nextInt();         }         totals = new int[h+1];         totals[1] = k[0];         for (int i=2; i<h+1; i++) {             totals[i]=totals[i-1]+k[i-1];         }         int maxcap = h-s+1;         int unhappines[][] = new int[h+1][h+1];         for (int i=1; i<=/*maxcap*/h; i++) {             int up = Math.min(h, maxcap+i);             for (int j=i; j<=up; j++) {                 int len = j-i+1;                 int ones = totals[j]-totals[i-1];                 unhappines[i][j] = (len-ones)*ones;             }         }         int a[][] = new int[h+1][s+1];         for (int i=1; i<=h; i++) {             Arrays.fill(a[i], Integer.MAX_VALUE);         }         int maxes[] = new int[s+1];         for (int i=1; i<=s; i++) {             maxes[i] = maxcap+i-1;         }         for (int i=1; i<=maxcap; i++) {             a[i][1] = unhappines[1][i];         }         for (int stable=2; stable<=s; stable++) {             for (int i=stable; i<=maxes[stable]; i++) {                 for (int j=i; j<=maxes[stable]; j++) {                     int prev = a[i-1][stable-1];                     a[j][stable] = Math.min(a[j][stable], unhappines[i][j]+prev );                 }             }         }         System.out.println(a[h][s]);     }       static class FastScanner {         BufferedReader br;         StringTokenizer st;           FastScanner(Reader in) {             br = new BufferedReader(in);         }           String next() {             while (st == null || !st.hasMoreTokens()) {                 try {                     st = new StringTokenizer(br.readLine());                 } catch (IOException e) {                     e.printStackTrace();                 }             }             return st.nextToken();         }           int nextInt() {             return Integer.parseInt(next());         }     }   }    |  
  | 
|