全部评论
一顿操作40%醉了
dp,过了40% 第二题暴力就能AC,差点没时间做第二题……
我也做了40%
public class ALibaba {
static int res=Integer.MAX_VALUE;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine();
int n = Integer.parseInt(line);
int[][] area = new int[n][n];
for (int i = 0; i < n; i++) {
line = scanner.nextLine();
String[] split = line.split(",");
if (split.length != n) {
throw new IllegalArgumentException("错误输入");
}
int j = 0;
for (String num : split) {
area[i][j++] = Integer.parseInt(num);
}
}
int minimumTimeCost = getMinimumTimeCost(n,area);
System.out.println(res);
}
/** 请完成下面这个函数,实现题目要求的功能 **/
/** 当然,你也可以不按照这个模板来作答,完全按照自己的想法来 ^-^ **/
private static int getMinimumTimeCost(int n, int[][] area) {
for(int i=0;i<n;i++) {
dfsHelper(0,i,n,area,0);
}
return 0;
}
private static void dfsHelper(int i,int j,int n,int[][] area,int record) {
if(i==n-1) {
res=Math.min(res, record);
return;
}
if(i==n-2) {
dfsHelper(i+1,j,n,area,record+area[i+1][j]);
}
if(i<n-2) {
dfsHelper(i+2,j,n,area,record+area[i+1][j]);
}
if(j<n-2) {
dfsHelper(i,j+2,n,area,record+area[i][j+1]);
}
}
} DFS暴搜 40.。。。
第一题我的思路就是新建个二维arr数组,取arr[i+1][j]和arr[i][j+1]+arr2[i][j+2]的最小值,
可是只通过了 40%
public class solution1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[][] arr=new int[n][n];
for(int i=0;i<n;i++){
String s=sc.next();
String[] str=s.split(",");
int[] num=new int[n];
for(int k=0;k<n;k++){
num[k]=Integer.valueOf(str[k]);
}
arr[i]=num;
}
int[][] arr2=new int[n][n];
for(int i=n-2;i>=0;i=i-2){
for(int j=n-1;j>=0;j--){
if(j>=n-2){
if(i==n-2){
arr2[i][j]=arr[i+1][j];
}else{
arr2[i][j]=arr2[i+2][j]+arr[i+1][j];
}
}else{
if(i==n-2){
arr2[i][j]=Math.min(arr[i+1][j],arr[i][j+1]+arr2[i][j+2]);
}else{
arr2[i][j]=Math.min(arr[i+1][j]+arr2[i+2][j],arr[i][j+1]+arr2[i][j+2]);
}
}
}
}
int min=Integer.MAX_VALUE;
for(int i=0;i<n;i++){
min=Math.min(arr2[0][i],min);
}
System.out.println(min);
}
}
//本地自己写的,不知道A了多少
//动规,机器人走格子问题,这次要跳着走
int n;
cin >> n;
vector<vector<int>> M(n, vector<int>(n,0));
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
cin >> M[i][j];
}
}
vector<vector<int>> dp(n,vector<int>(n,0));
//初始化前两列
for (int i = 2; i < dp.size(); i += 2)
{
dp[i][0] = dp[i-2][0] + M[i-1][0];
dp[i][1] = dp[i-2][1] + M[i-1][1];
}
// i = i + 2
for (int i = 2; i < dp.size(); i += 2)
{
for (int j = 2; j < dp[i].size(); ++j)
{
int x = dp[i - 2][j] + M[i - 1][j];
int y = dp[i][j - 2] + M[i][j - 1];
dp[i][j] = min(dp[i-2][j]+M[i-1][j],dp[i][j-2]+M[i][j-1]);
}
}
for (int j = 0; j < dp[n - 1].size(); ++j)
{
dp[n - 1][j] = dp[n - 2][j] + M[n - 1][j];
}
vector<int> resdp(dp[n-1]);
sort(resdp.begin(), resdp.end());
cout << resdp[0] << "\n";
等我提交的时候,没时间了。。。 import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine();
int n = Integer.parseInt(line);
int[][] area = new int[n][n];
for (int i = 0; i < n; i++) {
line = scanner.nextLine();
String[] split = line.split(",");
if (split.length != n) {
throw new IllegalArgumentException("错误输入");
}
int j = 0;
for (String num : split) {
area[i][j++] = Integer.parseInt(num);
}
}
int minimumTimeCost = getMinimumTimeCost(n, area);
System.out.println(minimumTimeCost);
}
private static int getMinimumTimeCost(int n, int[][] area) {
int res = Integer.MAX_VALUE;
for (int i = 0; i < n; i++) {
int t = dfs(area, 0, i, n, 0);
// System.out.println("res:" + t);
if (t < res && t != -1)
res = t;
}
return res;
}
static int dfs(int[][] area, int i, int j, int n, int t) {
// System.out.println(i + " " + j);
if (i > n || j >= n)
return -1;
if (i == n)
return t;
if (j == n - 1)
return dfs(area, i += 2, j, n, t += area[i - 1][j]);
if (area[i + 1][j] <= area[i][j + 1])
return dfs(area, i += 2, j, n, t += area[i - 1][j]);
return dfs(area, i, j += 2, n, t += area[i][j - 1]);
}
}
头脑风暴冷静了一会儿,我猜是不是他一开始可以不走第一行走第二行……
相关推荐
查看5道真题和解析
点赞 评论 收藏
分享
11-29 14:47
字节跳动_后端开发(准入职员工) 逆天 hr。。先是在面试之前给我换了两次面试时间,面试完就不回消息了。面试时候我已经明确说了我不接受上海和深圳,没有 hc 你给我挂了就是了现在说这个😅化身华黑子,纯逆天
沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待;
2.你的排名比较靠前,不要担心,耐心等待;
3.问题不大,正在审批,不要着急签其他公司,等等我们!
4.预计9月中下旬,安心过节;
5.下周会有结果,请耐心等待下;
6.可能国庆节前后,一有结果我马上通知你;
7.预计10月中旬,再坚持一下;
8.正在走流程,就这两天了;
9.同学,结果我也不知道,你如果查到了也告诉我一声;
10.同学你出线不明朗,建议签其他公司保底!
11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
不期而遇的夏天:恭喜啊大佬,这种个人时间多,应该可以搞搞副业,至少不算牛马了
点赞 评论 收藏
分享
查看19道真题和解析
点赞 评论 收藏
分享