HDU5914枚举

来源:互联网 发布:编程界面matlab 编辑:程序博客网 时间:2024/05/16 04:34

题意:给出长为1,2,...n的木棍,求最少移出多少条木棍,使得余下的木棍不能构成三角形(余下的木棍中取3条)


暴力枚举+打表

import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.util.ArrayList;import java.util.List;import java.util.Scanner;import java.util.StringTokenizer;public class Main {    public static void main(String[] args) {    new Task().solve(); ;     }}class  Task{  Scanner in = new Scanner(new BufferedInputStream(System.in)) ;PrintWriter out = new PrintWriter(System.out) ;static int[] dp = new int[21] ;static{dp[1]=0;dp[2]=0;dp[3]=0;dp[4]=1;dp[5]=1;dp[6]=2;dp[7]=3;dp[8]=3;dp[9]=4;dp[10]=5;dp[11]=6;dp[12]=7;dp[13]=7;dp[14]=8;dp[15]=9;dp[16]=10;dp[17]=11;dp[18]=12;dp[19]=13;dp[20]=14;}void solve(){int t = in.nextInt() ;for(int ca = 1 ; ca <= t ; ca++){out.println("Case #" + ca + ": " +dp[in.nextInt()])  ;}out.flush() ; }int calc(int n){int res = n ;int limit = 1<<n ;List<Integer> len = new ArrayList<Integer>() ;for(int i = 0 ; i < limit ; i++){int remove = 0 ;len.clear() ; for(int j = 0 ; j < n ; j++){if((i & (1<<j)) > 0){remove++ ;}else len.add(j+1) ;}if(! can(len)) res = Math.min(res , remove) ;}return res ;}boolean can(List<Integer> len){int m = len.size() ;for(int a = 0 ; a < m ; a++){for(int b = a+1 ; b < m ; b++){for(int c = b+1 ; c < m ; c++){if(can(len.get(a) , len.get(b) , len.get(c))) return true; }}}return false ; }boolean can(int a , int b , int c){return  (a + b > c) && (Math.abs(a - b) < c)||(a + c > b) && (Math.abs(a - c) < b)||(b + c > a) && (Math.abs(b - c) < a) ;}} class InputReader {      public BufferedReader reader;      public StringTokenizer tokenizer;        public InputReader(InputStream stream) {          reader = new BufferedReader(new InputStreamReader(stream), 32768);          tokenizer = new StringTokenizer("");      }        private void eat(String s) {          tokenizer = new StringTokenizer(s);      }        public String nextLine() {          try {              return reader.readLine();          } catch (Exception e) {              return null;          }      }        public boolean hasNext() {          while (!tokenizer.hasMoreTokens()) {              String s = nextLine();              if (s == null)                  return false;              eat(s);          }          return true;      }        public String next() {          hasNext();          return tokenizer.nextToken();      }        public int nextInt() {          return Integer.parseInt(next());      }        public long nextLong() {          return Long.parseLong(next());      }        public double nextDouble() {          return Double.parseDouble(next());      }        public BigInteger nextBigInteger() {          return new BigInteger(next());      }    }  


0 0
原创粉丝点击