結果
問題 | No.527 ナップサック容量問題 |
ユーザー |
![]() |
提出日時 | 2017-06-10 00:04:39 |
言語 | Java (openjdk 23) |
結果 |
AC
|
実行時間 | 114 ms / 2,000 ms |
コード長 | 2,417 bytes |
コンパイル時間 | 2,141 ms |
コンパイル使用メモリ | 78,368 KB |
実行使用メモリ | 51,532 KB |
最終ジャッジ日時 | 2024-09-22 20:30:06 |
合計ジャッジ時間 | 6,444 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 37 |
ソースコード
import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.util.NoSuchElementException;public class Main{int N,V;int[] v,w;public void solve() {N = nextInt();v = new int[N];w = new int[N];int vSum = 0;for(int i = 0;i < N;i++){v[i] = nextInt();w[i] = nextInt();vSum += v[i];}V = nextInt();int[] dp = new int[N * 1000 + 1];for(int i = 0;i < N;i++){for(int j = N * 1000;j >= 0;j--){if(j + w[i] <= N * 1000)dp[j+w[i]] = Math.max(dp[j+w[i]],dp[j]+v[i]);}}int lower = lowerBound(dp,V);int upper = upperBound(dp,V);out.println(lower);out.println(vSum <= V ? "inf" : upper);}public int upperBound(int[] a,int b){int low = 1;int high = a.length;while(high - low > 1){int mid = high+low >> 1;if(a[mid] > b){high = mid;}else{low = mid;}}return low;}public int lowerBound(int[] a,int b){int low = 0;int high = a.length;while(high - low > 1){int mid = high+low >> 1;if(a[mid] >= b){high = mid;}else{low = mid;}}return high;}public static void main(String[] args) {out.flush();new Main().solve();out.close();}/* Input */private static final InputStream in = System.in;private static final PrintWriter out = new PrintWriter(System.out);private final byte[] buffer = new byte[2048];private int p = 0;private int buflen = 0;private boolean hasNextByte() {if (p < buflen)return true;p = 0;try {buflen = in.read(buffer);} catch (IOException e) {e.printStackTrace();}if (buflen <= 0)return false;return true;}public boolean hasNext() {while (hasNextByte() && !isPrint(buffer[p])) {p++;}return hasNextByte();}private boolean isPrint(int ch) {if (ch >= '!' && ch <= '~')return true;return false;}private int nextByte() {if (!hasNextByte())return -1;return buffer[p++];}public String next() {if (!hasNext())throw new NoSuchElementException();StringBuilder sb = new StringBuilder();int b = -1;while (isPrint((b = nextByte()))) {sb.appendCodePoint(b);}return sb.toString();}public int nextInt() {return Integer.parseInt(next());}public long nextLong() {return Long.parseLong(next());}public double nextDouble() {return Double.parseDouble(next());}}