首页 > 解决方案 > 这是一个 codevita 问题,它在提交时给了我错误的答案。任何人都可以检查我在方法中做错了什么

问题描述

问题如下 棋盘游戏 问题描述 给你一个 N x N 方格。除左上角外的每个正方形都用一个正整数填充。您从得分为 0 的左上角开始,然后通过向右移动一格或向下移动一格来移动到右下角。当您移动到新方块时,您的分数变为 [S/2] + k,其中 S 是您前一个方块的分数,k 是当前方块中写入的数字。在上面,[x]是不大于x的最大整数。因此,[5] 是 5,而 [5.5] 也是 5。

编写一个程序,找出可以退出网格的最小分数。

约束 4 <= N <= 30

每个方格中的数字 <= 1000

输入格式 第一行包含一个整数 N,表示网格的大小

接下来的 N 行,每行都有 N 个空格分隔的整数,给出写在网格连续行上的数字

输出您可以退出网格的最小分数

时间限制 1

说明例 1

输入

输入

4

0 3 9 6

1 4 4 5

8 2 5 4

1 8 5 9

输出

12

解释

N=4。分数集如给定。4 X 4 分数如下所示

一组可能的动作是向下,向右,向下,向右,向右,向下。

对应的分数是1、4、4、7、7、12

示例 2

输入

5

0 82 2 6 7

4 3 1 5 21

6 4 20 2 8

6 6 64 1 8

1 65 1 6 4

输出

7

解释

一组可能的移动是向下,向右,向右,向右,向下,向下,向下,向右

`import java.util.Scanner;
public class A_Board_Game {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        int[][] board = new int[n][n];
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                board[i][j] = s.nextInt();
            }
        }
        System.out.println(minscore(board,n));
    }
    public static int minscore(int[][] a, int n){
        int ans = 0,i=0,j=0;
        while(i+1<n && j+1<n){
           if(a[i+1][j]<a[i][j+1]){
               ans = (ans/2) + a[i+1][j];
               i = i+1;
           //    System.out.println("down is "+ans);
           }
           else{
               ans = (ans/2) + a[i][j+1];
               j=j+1;
             //   System.out.println("right is "+ans);
           }
        }     
        ans = (ans/2) + a[n-1][n-1];  
        return ans;
    }  
}
`

标签: java

解决方案


// 兄弟,我不知道你的代码有什么问题,但这是我的解决方案 import java.util.Scanner;

公共类 DP_codevita { public static void main(String[] args) {

    Scanner sc=new Scanner(System.in);
int a=sc.nextInt();


int arr[][]=new int[a][a];

    for(int i=0;i<a;i++)
{ for(int j=0;j<a;j++)
    {  
    arr[i][j]=sc.nextInt();

    }   
}
     for(int i=0;i<arr.length;i++)
{ for(int j=0;j<arr[0].length;j++)
    {  if(i==0 && j==0)
       {
        arr[i][j]=0;
       }
        else if(i==0 && j!=0)
       {   
          arr[i][j]= (int)Math.floor((arr[i][j-1]/2)+arr[i][j]);
       }
       else if(i!=0 && j==0)
       {
            arr[i][j]= (int)Math.floor((arr[i-1][j]/2)+arr[i][j]);
       }
       else
       { 
           int min=Math.min(arr[i][j-1], arr[i-1][j]);
            arr[i][j]= (int)Math.floor((min/2)+arr[i][j]);
       }


    }   
}

     System.out.println(arr[a-1][a-1]);

} }


推荐阅读