1. 程式人生 > >ALGO137——Lift and Throw

ALGO137——Lift and Throw

  一開始Laharl在位置9, Etna在位置4, Flonne在位置2.
  首先, Laharl移動到6.
  然後Flonne移動到位置5並且舉起Etna.
  Laharl舉起Flonne將其扔到位置9.
  Flonne把Etna扔到位置12.
  Etna移動到位置15.
import java.util.Scanner;

public class algo_137 {
	
	static int[][] init = new int[3][4];//00位置  01移動距離 02扔的距離 03丟擲的人
	static int[][] vis = new int[3][4];// 00是否已經舉起     01是否已經移動  02是否可以丟擲 03是否可操作(初始化0沒被舉起,可操作)
	//vis[i][j] i代表人取值為012 三人  
	//j取值為01 分別為0沒舉起    0沒移動   0不可以丟擲  0可操作
	static int max = 0;                
	//是否相鄰
	static int near(int s){
		for(int i=0;i<3;i++){
			if(s==init[i][0]+1 || s==init[i][0]-1)
				return 1;
		}
		return 0;
	}
	
	static void dfs(int t){
		for (int i = 0; i < 3; i++)
			max = Math.max(max, init[i][0]);

		for (int i = 0; i < 3; i++) {
			//0沒舉起    0沒移動   0不可以丟擲  0可操作
			if(vis[i][3]==1)
				continue;//不可操作
			//還沒移動且不能丟擲,可操作
			if (vis[i][1]==0 && vis[i][2] == 0 && vis[i][3]==0) {
				//在最大移動距離移動
				for(int j=1;j<=init[i][1];j++){
					init[i][0]+= j;//向前移動
					vis[i][1] = 1;//標記已移動過
					//移動後的旁邊有人或者移動值到最大
					if(near(init[i][0])==1 || j==init[i][1]) 
						dfs(t+1);
					//恢復
					init[i][0]-= j;
					//向後移動
					init[i][0]-= j;//移動後的旁邊有人或者移動值到最大
					if(near(init[i][0])==1 || j==init[i][1])
						dfs(t+1);
					//恢復
					//0沒舉起    0沒移動   0不可以丟擲  0可操作
					init[i][0]+= j;
					vis[i][1] = 0;//還沒移動
				}
			}
			//沒舉起
			if(vis[i][0]==0 && vis[i][3]==0){
				for(int j=0;j<3;j++){
					if(i!=j && vis[j][3]==0 && init[j][2]>0)
					{
						//附近有人
						if(init[i][0]==init[j][0]+1 || init[i][0]==init[j][0]-1)
						//if(near(init[j][0])==1)
						{
							 //00沒舉起    01沒移動   02不可以丟擲  03可操作
							vis[j][3]=1;//被舉起,標記不可操作
							vis[i][0]=1;//舉起
							vis[i][2]=1;//可以丟擲
							init[i][3]=j;//記錄init[i]舉起了j
							
							dfs(t+1);
							vis[j][3]=0;
							vis[i][0]=0;
							vis[i][2]=0;
						}
					}
				}
			}
			//可以丟擲  //00沒舉起    01沒移動   02不可以丟擲  03可操作
			if(vis[i][2]==1 && vis[i][3]==0)
			{
				for(int j=1;j<=init[i][2];j++){
					vis[i][2]=0;//標記不可丟擲
					vis[init[i][3]][3]=0;//標記被舉起的為可操作
					int temp = init[init[i][3]][0];//被舉起的位置
					init[init[i][3]][0]=init[i][0]+j;//扔出後位置為 扔的位置+扔的距離
					//如果旁邊有人或者達到丟擲最大距離
					if(near(init[init[i][3]][0])==1 || j==init[i][2])
						dfs(t+1);
					
					init[init[i][3]][0]-=j;
					
					init[init[i][3]][0]-=j;
					if(near(init[init[i][3]][0])==1 || j==init[i][2])
						dfs(t+1);
					//00沒舉起    01沒移動   02不可以丟擲  03可操作
					vis[i][2]=1;
					vis[init[i][3]][3]=1;
					init[init[i][3]][0]=temp;
				}
			}
		}
				
		
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		for(int i=0;i<3;i++){
			for(int j=0;j<3;j++)
			{
				init[i][j]=sc.nextInt();
			}
		}
		
		
		dfs(1);
		System.out.println(max);
	}
}


相關推薦

ALGO137——Lift and Throw

  一開始Laharl在位置9, Etna在位置4, Flonne在位置2.   首先, Laharl移動到6.   然後Flonne移動到位置5並且舉起Etna.   Laharl舉起Flonne將其扔到位置9.   Flonne把Etna扔到位置12.   Etna移動到位置15.import java.

藍橋杯 演算法訓練 Lift and Throw

問題描述   給定一條標有整點(1, 2, 3, …)的射線. 定義兩個點之間的距離為其下標之差的絕對值.   Laharl, Etna, Flonne一開始在這條射線上不同的三個點, 他們希望其中某個人能夠到達下標最大的點.   每個角色只

藍橋杯演算法訓練——lift and throw

#include <iostream> #include <cmath> #include <cstring> using namespace std; #define M 50 struct People { int pos;

演算法-藍橋杯-演算法訓練 Lift and Throw (C++)

1 引言    吃完飯,繼續,今天的目標是10篇,然後去看《演算法》和課外書。2 題目問題描述  給定一條標有整點(1, 2, 3, ...)的射線. 定義兩個點之間的距離為其下標之差的絕對值.  Laharl, Etna, Flonne一開始在這條射線上不同的三個點, 他們

演算法訓練 Lift and Throw (DFS && 位運算)

問題描述   給定一條標有整點(1, 2, 3, …)的射線. 定義兩個點之間的距離為其下標之差的絕對值.   Laharl, Etna, Flonne一開始在這條射線上不同的三個點, 他們希望其中某個人能夠到達下標最大的點.   每個角色只能進行下面的3

swift 報錯 Call can throw, but it is not marked with 'try' and the error is not handled

在開發中使用正則表示式時報了這樣的問題:Call can throw, but it is not marked with 'try' and the error is not handled,即: let regex:NSRegularExpression = NSRegularExpression(pa

wyh2000 and pupil

cor other miss 貪心 -i mission spa size foo wyh2000 and pupil Accepts: 93 Submissions: 925 Time Limit: 3000/1500 MS (Java/Other

[Binary Hacking] ABI and EABI

about specific pap spec ica app .debian rpc cati Following are some general papers about ABI and EABI. Entrance https://en.wikiped

《Thinking in Java》 And 《Effective Java》啃起來

大學 前言 技術 數據結構和算法 解決 一句話 定義 應該 太多的 前言   今天從京東入手了兩本書,《Thinking in Java》(第四版) 和 《Effective Java》(第二版)。都可以稱得上是硬書,需要慢慢啃的,預定計劃是在今年前把這兩本書啃完。哈哈,可

throw和throws

int 出現異常 程序員 代碼 產生 修飾符 exc 數列 new 區別一: throw 是語句拋出一個異常;throws 是方法拋出一個異常; throw語法:throw <異常對象>

The connection to adb is down, and a severe error has occured

真的 findstr ole pla a10 tool fcm ott art 相信不少人在android中都遇到了你下面不好解決的問題: 首先描寫敘述癥狀,例如以下圖 解決方法: 方法1:先在cmd中adb kill-server,然後adb -startser

A - Mike and palindrome

nbsp == 字符串長度 cda problem eal iostream quotes aaa A - Mike and palindrome Mike has a string s consisting of only lowercase English le

code force 798cMike and gcd problem

sub while 並且 cati put ins i++ des 替代 Mike has a sequence A?=?[a1,?a2,?...,?an] of length n. He considers the sequence B?=?[b1,?b2,?...,?b

codeforces 798C Mike and gcd problem

opera can sample pan using str ssl else font C.Mike and gcd problem Mike has a sequence A?=?[a1,?a2,?...,?an] of length n. He cons

HDU 1078 FatMouse and Cheese

blog pan con turn str while fat 記憶 sort 記憶化搜索,$dp$。 每一個點走到的最長距離是固定的,也就是只會算一次,那麽記憶化一下即可,也可以按值從小到大排序之後進行$dp$。 記憶化搜索: #include <cstd

湘潭邀請賽——Alice and Bob

indicate pro scan printf turn name pap 100% %d Alice and Bob Accepted : 133 Submit : 268 Time Limit : 1000 MS Memory Lim

H - Alyona and Spreadsheet

遞增 title logs example otherwise 個數 quest 數組a sorted H - Alyona and Spreadsheet During the lesson small girl Alyona works with one famous

No result defined for action com.action.Actionxxx and result xxx

jsp 特殊 cti nbsp 方法 def no result 使用 for 報錯:No result defined for action com.action.Actionxxx and result xxx 剛學Struts2不久,寫的第一個Action就遇到這個問

聖杯布局and雙飛翼布局

content 尺寸 元素 不一定 oot alt ctype 間距 mar *聖杯布局 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <ti

codeforces_346A Alice and Bob(數學)

win sam deb 兩個 uri ems nal contains statement 題目鏈接:http://codeforces.com/problemset/problem/346/A 參考鏈接:http://blog.csdn.net/loy_184548/ar