携程在线测试题答案 乘积最大: 尝试不同的拆分方法,dp 求解或者找规律 示例代码: #include #include #include #include #define maxn 109 using namespace std; long long dp[maxn][maxn]; int solve(int n){ long long ans = 0; for(int i = 0; i = n; i++) ans = max(ans, dp[n][i]); return ans; } int main(){ int n; cin n; for(int i = 0; i = n; i++) dp[0][i] = 1; for(int i = 1; i = n; i++){ for(int j = 1; j = i; j++){ for(int k = 0 ; k j; k++) dp[i][j] = max(dp[i][j], dp[i j][k] * j); } } cout solve(n) endl; return 0; } 拼图: 经典问题,广度优先搜索 示例代码: import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; import java.util.Scanner; import java.util.Set; import java.util.HashSet; import java.util.ArrayList; import java.lang.StringBuilder; public class Main{ public static String destNumbers = 123456780; public static Set set = new HashSet(); public static int[]moveTable = new int[]{12,14,10,13,15,11,5,7,3}; public static ArrayList getNextMoveList(Node pNode){ int position = pNode.numbers.indexOf(0); int moveStatus = moveTable[position]; ArrayList cNodes = new ArrayList(); for(int status=1; status =8; status=status1){ if((moveStatus status) 0){ char[] charNumbers = pNode.numbers.toCharArray(); int switchPosition = 0; if(status == 1){ switchPosition = position 3; } else if(status == 2){ switchPosition = position 1; } else if(status == 4){ switchPosition = position + 1; } else if(status == 8){ switchPosition = position + 3; } charNumbers[position] = charNumbers[switchPosition]; charNumbers[switchPosition] = 0; String s = String.valueOf(charNumbers); if(!set.contains(Integer.valueOf(s))){ set.add(Integer.valueOf(s)); Node n = new Node(pNode, s, charNumbers[position]); cNodes.add(n); } } } return ...