2018-8 网易编程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jcsyl_mshot/article/details/81738884

题目一:
小易觉得高数课太无聊了,决定睡觉。不过他对课上的一些内容挺感兴趣,所以希望你在老师讲到有趣的部分的时候叫醒他一下。你知道了小易对一堂课每分钟知识点的感兴趣程度,并以分数量化,以及他在这堂课上每分钟是否会睡着,你可以叫醒他一次,这会使得他在接下来的k分钟内保持清醒。你需要选择一种方案最大化小易这堂课听到的知识点分值。
输入描述:
第一行 n, k (1 <= n, k <= 105) ,表示这堂课持续多少分钟,以及叫醒小易一次使他能够保持清醒的时间。
第二行 n 个数,a1, a2, … , an(1 <= ai <= 104) 表示小易对每分钟知识点的感兴趣评分。
第三行 n 个数,t1, t2, … , tn 表示每分钟小易是否清醒, 1表示清醒。

解法一:未优化 50%准确率

import java.util.Scanner;


public class clock {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        int minTotal = in.nextInt();
        int keep = in.nextInt();
        int value[] = new int[minTotal];
        int noSleep[]=new int[minTotal];

        for(int i=0;i<minTotal;i++){
            value[i]=in.nextInt();
        }
        for(int i=0;i<minTotal;i++){
            noSleep[i]=in.nextInt();

        }

        int max=0;
        for(int i=1;i<=minTotal;i++){
            int maxValue=0;
            int  M=i+keep>minTotal?minTotal-1:i+keep-2;
            for(int j=0;j<minTotal;j++){
                if(j<i-1){
                    if(noSleep[j]!=0)
                        maxValue+=value[j];}
                else if(j<=M){
                    maxValue+=value[j];
                }else{
                    if(noSleep[j]!=0)
                        maxValue+=value[j];
                }
            }

            if(maxValue>=max)
                max=maxValue;
        }
        System.out.print(max);
    }

}

解法二:

import java.util.Scanner;
public class Main {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int k = in.nextInt();
        int[] score = new int[n];
        int[] wakeup = new int[n];
        int sum = 0;
        for(int i=0;i<n;i++){
            score[i]=in.nextInt();
            sum+=score[i];
        }
        for(int i=0;i<n;i++){
            wakeup[i]=in.nextInt();
        }
        if(n<=k) System.out.println(sum);
        else{
            sum=0;
            int max=0;
            for(int i=0;i<n;i++){
                if(wakeup[i]==1){
                    sum+=score[i];
                }else{
                    int bound = (i+k-1)>=n?n-1:(i+k-1);
                    int window = 0;
                    for(int j=i;j<=bound;j++){
                        if(wakeup[j]==0){
                            window+=score[j];
                        }
                    }
                    if(window>max){
                        max=window;
                    }
                }
            }
            System.out.println(max+sum);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/jcsyl_mshot/article/details/81738884