鱼塘钓鱼
题目描述

解题思路
首先,我们需要明确一个事情,我们钓鱼的所有路线,只能是向右走,不能回头,如果回头相当于多浪费了一个池塘到另一个池塘的时间。所以我们只需要枚举所有路径,并且求出所有路径中最优解就好了。

这就是一个多路归并问题。我们只需要找到1 - i路径中,所有池塘根据时间排序能调到的鱼前t个就好了。

代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| package com.zgy; import java.io.*; import java.util.*;
class Main{ public static int N = 100,n,T; public static int[] a = new int[N],d = new int[N],ne = new int[N],work = new int[N]; public static Scanner sc = new Scanner(System.in);
public static int work(int x,int t){ int res = 0; while(t > 0){ int max = 0,j = 0; for(int i = 1;i <= x;i++){ int k = Math.max(0,a[i] - d[i]*work[i]); if(k > max){ j = i; max = Math.max(0,a[i] - d[i]*work[i]); } } System.out.printf("%d-------%d\n",x,j); res += Math.max(0,a[j] - d[j]*work[j]); work[j]++; t--; } return res; }
public static void main(String[] args){ n = sc.nextInt(); for(int i = 1;i <= n;i++) a[i] = sc.nextInt(); for(int i = 1;i <= n;i++) d[i] = sc.nextInt(); for(int i = 1;i < n;i++) ne[i] = ne[i-1] + sc.nextInt(); T = sc.nextInt();
int res = 0; for(int i = 1;i <= n;i++){ Arrays.fill(work,0); int t = ne[i-1]; res = Math.max(res,work(i,T - t)); } System.out.println(res);
} }
|
版权声明: 此文章版权归waar299所有,如有转载,请注明来自原作者!