gonefishing.java

来自「PKU中一些数据结构基本算法题的java实现」· Java 代码 · 共 94 行

JAVA
94
字号
package PKU.GA;
import java.util.*;


/**
 * ID:1042
 * 贪心法
 * 
 * @author yhm
 *
 */
public class GoneFishing {
	public static void main(String args[]) throws Exception {
		Scanner cin = new Scanner(System.in);
		while(cin.hasNext()){
			int n = cin.nextInt();
			if(n == 0) {
				break;
			}
			int h = cin.nextInt();
			int[] fi = new int[n];
			int[] di = new int[n];
			for(int i=0;i<n;i++){
				fi[i]=cin.nextInt();
			}
			for(int i=0;i<n;i++){
				di[i]=cin.nextInt();
			}
			int[] ti = new int[n-1];
			for(int i=0;i<n-1;i++){
				ti[i]=cin.nextInt();
			}
			
			solve(n,h,fi,di,ti);
			
		}
	}
	
	static private void solve(int n,int h,int[] fi,int[] di, int ti[]){

		int[] resultTime = new int[n];
		Arrays.fill(resultTime, 0);
		
		
		
		int best = -1;
		for(int i=0;i<n;i++){
			int resultFish = 0;
			int totaltime = (h*60)/5;
			if(totaltime<0){
				break;
			}
			int[] currentFish = new int[i+1];
			int[] resultTime1 = new int[n];
			Arrays.fill(resultTime1, 0);
			for(int j=0;j<i+1;j++){
				currentFish[j] = fi[j];
			}
			
			for(int j=0;j<i;j++){
				totaltime-=ti[j];
			}
			for(int k=0;k<totaltime;k++){
				int select = 0; 
				for(int j=0;j<i+1;j++){
					if(currentFish[j]>currentFish[select]){
						select = j;						
					}
				}
				resultFish+=currentFish[select];
				currentFish[select]-=di[select];
				if(currentFish[select]<0){
					currentFish[select] = 0;
				}
				resultTime1[select]++;
			}
			if(resultFish>best){
				best=resultFish;
				resultTime = resultTime1;
			}			
		}
		for(int j=0;j<n;j++){
			if(j!=n-1){
				System.out.print(resultTime[j]*5+", ");				
			}
			else{
				System.out.println(resultTime[j]*5+" ");	
			}
		}
		System.out.println("Number of fish expected: "+best);
		System.out.println();
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?