4.8阿里笔试

import java.util.Scanner;

public class Main1 {
    public static void main(String[] args) {
        int t;
        Scanner scanner=new Scanner(System.in);
        t=scanner.nextInt();

        for(int i=1;i<=t;i++){
            int time=scanner.nextInt();
            int num=scanner.nextInt();
            int first_blood=scanner.nextInt();
            int max_attack=scanner.nextInt();
            if(time<first_blood){
                System.out.println(0);
                continue;
            }
            if(time==first_blood){
                System.out.println(max_attack);
                continue;
            }
            if(time*max_attack>=num*first_blood){  //大于了总血量
                System.out.println(num);
            }
            else
                System.out.println((int) Math.ceil((double) time*max_attack/(double) first_blood));
        }
    }
}
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int t=scanner.nextInt();
        for (int i=0;i<t;i++){
            int n=scanner.nextInt();  
            int max_step=scanner.nextInt();  
            int[][] value=new int[n+1][n+1];
            for (int j=1;j<=n;j++){
                for (int k=1;k<=n;k++){
                    value[j][k]=scanner.nextInt();
                }
            }
            int[][] dp=new int[n+1][n+1]; 
            System.out.println(calcMaxWay(1,1,max_step,dp,value));
        }
    }
    private static int calcMaxWay(int x,int y,int max_step,int[][] dp,int[][] value){
        if (dp[x][y]>0) 
            return dp[x][y];
        int max_sum=0; 

        for (int step=1;step<=max_step;step++){

            if(y-step>0 && value[x][y-step]>value[x][y]) max_sum=Math.max(max_sum,calcMaxWay(x,y-step,max_step,dp,value));
            if(y+step<value[1].length && value[x][y+step]>value[x][y]) max_sum=Math.max(max_sum,calcMaxWay(x,y+step,max_step,dp,value));
            if(x-step>0 &&value[x-step][y]>value[x][y]) max_sum=Math.max(max_sum,calcMaxWay(x-step,y,max_step,dp,value));
            if(x+step<value[1].length && value[x+step][y] > value[x][y])max_sum=Math.max(max_sum,calcMaxWay(x+step,y,max_step,dp,value));
        }
        dp[x][y]=value[x][y]+max_sum;
        return dp[x][y];
    }
}


#阿里笔试##阿里巴巴#
全部评论
阿里笔试只有两道编程题吗?
点赞 回复 分享
发布于 2020-04-11 22:34
问下楼主,第一题最后一种情况:是不是应该直接:time*max_attack/first_blood
点赞 回复 分享
发布于 2020-04-10 15:58
小白像问一下楼主,第二题为什么从1,1开始?而不是0,0? 然后dp[i][j]里存储的是到value[i][j]时的最大路径值是么?
点赞 回复 分享
发布于 2020-04-09 11:40

相关推荐

点赞 评论 收藏
分享
迷茫的大四🐶:自信一点,我认为你可以拿到50k,低于50k完全配不上你的能力,兄弟,不要被他们骗了,你可以的
点赞 评论 收藏
分享
评论
3
10
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务