1. 程式人生 > >ccf 201809-4 再賣菜 java 100分

ccf 201809-4 再賣菜 java 100分

import java.util.Scanner;

public class c20180904 {
	static int total;
	static int []first;
	static int []second;
	static boolean [][][]visit;
	static void dfs(int n,int x,int y){
		if(visit[n][x][y])return;//剪枝,不加只有80分 
		visit[n][x][y]=true;
		
		if(n==total-1){
			if((3*second[n]-x)/2==second[total]||(3
*second[n]-x+1)/2==second[total]||(3*second[n]-x+2)/2==second[total]){ //最後一天菜價 for(int i=1;i<=n;++i) //輸出 System.out.print(first[i]+" "); for(int i=0;i<3;++i) { if((3*second[n]-x+i)/2==second[total]) //輸出最後一天菜價 { System.out.print(3*second[n]-x-y+i+" "); System.
exit(0);//終止 } } } return; } for(int i =0;i<3;i++){ first[n+1]=3*second[n]-x-y+i; if(first[n+1]>0){ dfs(n+1,y,first[n+1]); } } } public static void main(String []args){ Scanner sc = new Scanner(System.in); total = sc.nextInt(); second = new int[400]; first =
new int[400]; visit = new boolean[301][301][301]; for(int i =1;i<=total;i++){ second[i] = sc.nextInt(); } for(int i=1;i<=2*second[1];i++) { first[1]=i; first[2]=2*second[1]-i; //第一天菜價,有兩種可能 dfs(2,first[1],first[2]); first[1]=i; first[2]=2*second[1]-i+1; //第二種可能 dfs(2,first[1],first[2]); } } }