【ShawnZhang】ブルーブリッジカップをご案内します.アルゴリズムは楽しい運転手を高めます.


問題の説明
ところで、今は運転手になるのに赤いハートがあるだけではだめだ.ドラは過負荷ではなく、荷物の価値を最大にするためです.
特に現在の原油価格が日進月歩の時だ.運転手が引いた貨物は、米、小麦粉、砂石、土などの散財品だった.
自動車の核荷重がwであり、選択可能な物品の数nが分かった.各品物の重量はgiで、価値はpiです.
自動車の積載することができる最大の価値を求めます.(n<10000,w<10000,0入力フォーマット
第1の動作をスペースで区切った2つの整数n wを入力する
2行目からn+1行目まで、行ごとに2つの整数があり、giとpiをそれぞれ表すスペースで区切られている.
出力フォーマット
最大値(小数点以下1桁保持)
サンプル入力
5 36
99 87
68 36
79 43
75 94
7 35
サンプル出力
71.3
説明:
先に第5号の物品を詰めて、35を得て、重量の7を占有します
第4号の物品を更に詰めて、価値の36.346を得て、重量の29を占有します
最後に小数点を1桁残して71.3を得る
くだらないことは言わないで,まずコードをくっつけなさい.
import java.text.DecimalFormat;
import java.util.Arrays;
import java.util.Scanner;

public class ADV167 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in=new Scanner(System.in);
		int n=in.nextInt();//    n
		double W=in.nextDouble();//  w
		
		double[] gi=new double[n];
		double[] pi=new double[n];
		double[] vi=new double[n];
		DecimalFormat   df   =new   java.text.DecimalFormat("#.00000");  
		
		int i=0;
		for(i=0;i0){
			int maxP=max(vi);
			if(gi[maxP]max){
				max=vi[i];
				maxP=i;
				
			}
		}
		
		return maxP;
	}

}

次に、この問題の問題がどこにあるかを重点的に解析します.
まず最初はgiとpiのタイプを間違えて、平均値を要求して、2つのdoubleで除去しなければなりません.最初は2つのintで除去して、最後の結果はいつも0になります.
2点目は5桁の小数点を残す方法です
DecimalFormat   df   =new   java.text.DecimalFormat("#.00000");  
vi[i]=Double.parseDouble(df.format(pi[i]/gi[i]));
//    
vi[i]=Double.parseDouble(new   java.text.DecimalFormat("#.00000").format(pi[i]/gi[i]));

もちろん、上記のコードは以下のように略すこともできます.
最后に小数点以下で出力することも含めて、printfのようなC言语で使う文法で出力することができます.テーマは难しくありません.リュックサックの问题でカットできるタイプですが、90点しか取れません.データのセットが要求に合わないので、以下のように贴り付けてください.
入力:32 9000 53 17 95 68 35 87 12 2 76 84 67 98 82 19 90 16 83 71 82 7 80 1 80 0 32 42 78 12 43 88 73 95 46 4 87 98 9 67 16 43 60 98 38 15 67 32 64 82 37 48 71 99 35 79 20 12 28 83 39 22 98
正しい出力:1597.0
私のコードの段はただこの1つのケースの上で問題を除いて、私のコードの学友を読んで伝言を残してください