度小满笔试题(Android岗位100%和64%)

求隔山打牛正确思路!!!

第一题:棋盘遍历:100%
public class one {
    public static void main(String[] args) {
        Scanner read = new Scanner(System.in);
        long n = read.nextLong();
        long m = read.nextLong();
        if(n == 1 || m == 1){
            if(n == 1){
                System.out.println(m - 1 + m - 1 );
            }else{
                System.out.println(n - 1 + n - 1);
            }

        }
        else if(n % 2 == 0 ||  m % 2 == 0){
            System.out.println(n*m);
        }else{
            System.out.println(n * m + 1);
        }
    }
}



第二题:隔山打牛:64%
public class two {
    public static void main(String[] args) {
        Scanner read = new Scanner(System.in);
        int n = read.nextInt();
        int[] num = new int[n+1];
        for(int i = 1;i<=n;i++){
            num[i] = read.nextInt();
        }
        int max;
        int sum = 0;
        for(int i=n;i>=1;i--){
            if(num[i] > 0){
                sum+=num[i];
                //奇数的
                if(i - 1 > 0 && (( i - 1) % 2 ) == 0){
                    num[i - 1] -= num[i];
                    num[(i - 1) / 2] -= num[i];
                }else if(i != 1){ // 偶数的
                    num[ i / 2 ] -= num[i];
                }
            }

        }
        System.out.println(sum);
    }
}


#度小满##笔试题目#
全部评论
长度好像只能奇数吧,最后一个2x+1打,因为题目要求2x+1<=n呀,23333
点赞 回复 分享
发布于 2019-09-29 20:39
这个x应该是可以为小数的,所以楼主应该是少考虑了当n为偶数的情况。
点赞 回复 分享
发布于 2019-09-29 21:20
小车过桥有没有讨论的? 不知道a了多少,最后没时间写完了……来讨论下 #include<iostream> #include<vector> using namespace std; int main() { int N, W; cin >> N >> W; vector<int> w(N, 0); vector<int> t(N, 0); for (int i = 0; i < N; i++) { cin >> w[i]; } int T = 0; for (int i = 0; i < N; i++) { cin >> t[i]; T += t[i]; } vector< vector<int>> dp(N, vector<int>(T, 0)); for (int j = 0; j < T; j++) { if (t[0] > j) dp[0][j] = w[0]; else break; } for (int i = 1; i < N; i++) { int time = 0; int index = 0; bool flag = 1; for (int j = 0; j < T; j++) { dp[i][j] = dp[i - 1][j]; if (flag && W - dp[i - 1][j] >= w[i]) { index = j; flag = 0; } if (W - dp[i - 1][j] >= w[i] && (t[i] + index > j)) { dp[i][j] = w[i] + dp[i - 1][j]; } } } bool flag = 1; for (int j = 0; j < T; j++) { if ( dp[N - 1][j] == 0) { cout<<j; break; } } system("pause"); return 0; }
点赞 回复 分享
发布于 2019-09-29 21:43

相关推荐

不愿透露姓名的神秘牛友
昨天 19:05
点赞 评论 收藏
分享
牛客154160166号:9月底还给我发短信,好奇怪,我24届的
点赞 评论 收藏
分享
2 6 评论
分享
牛客网
牛客企业服务