コード例 #1
0
ファイル: Invest.java プロジェクト: gvikei/egork
 void solve() {
   int universitiesCount = in.readInt();
   int maxGrants = in.readInt();
   int grantsCount = in.readInt();
   double[] profit = new double[grantsCount + 1];
   for (int i = 0; i < universitiesCount; i++) {
     double[] currentProfit = new double[maxGrants + 1];
     for (int j = 0; j <= maxGrants; j++) currentProfit[j] = in.readDouble();
     for (int j = grantsCount; j >= 0; j--) {
       for (int k = 0; k <= maxGrants && k <= j; k++)
         profit[j] = Math.max(profit[j], profit[j - k] + currentProfit[k]);
     }
   }
   out.printf("%.2f\n", profit[grantsCount]);
 }
コード例 #2
0
ファイル: Segments.java プロジェクト: gvikei/egork
	void solve() {
		int n = in.readInt();
		int[] x = new int[2 * n];
		final int[] y = new int[2 * n];
		for (int i = 0; i < n; i++) {
			x[2 * i] = in.readInt();
			x[2 * i + 1] = in.readInt();
			y[2 * i] = y[2 * i + 1] = in.readInt();
		}
		Integer[] o = new Integer[2 * n];
		for (int i = 0; i < 2 * n; i++)
			o[i] = i;
		Arrays.sort(o, new Comparator<Integer>() {
			public int compare(Integer o1, Integer o2) {
				return y[o1] - y[o2];
			}
		});
		int[][] result = new int[2 * n][2 * n];
		for (int[] row : result)
			Arrays.fill(row, Integer.MIN_VALUE);
		result[o[0]][o[0]] = 0;
		result[o[1]][o[1]] = 0;
		for (int ii = 2; ii < 2 * n; ii++) {
			int i = o[ii];
			int maxIndex = ii - ii % 2;
			for (int jj = 0; jj < maxIndex; jj++) {
				for (int kk = 0; kk < maxIndex; kk++) {
					int j = o[jj];
					int k = o[kk];
					if (valid(k, j, i, x, y)) {
						result[i][j] = Math.max(result[i][j], result[k][j] + triangleSquare(i, j, k, x, y));
						result[k][i] = Math.max(result[k][i], result[k][j] + triangleSquare(i, j, k, x, y));
					}
				}
			}
		}
		int answer = 0;
		for (int i = 0; i < 2 * n; i++) {
			for (int j = 0; j < 2 * n; j++)
				answer = Math.max(answer, result[i][j]);
		}
		out.printf("%.1f\n", answer * .5);
	}