Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- public class Solution {
- static Scanner sc = new Scanner(System.in);
- public static int cuttingTime(int N,int K,int[] P){
- if(N==K)return 0;
- int[] dp = new int[N];
- Deque<Integer> dqcost = new LinkedList<>();
- Deque<Integer> dqindex = new LinkedList<>();
- for(int i=0;i<=K;i++) {
- dp[i] = P[i];
- while(!dqcost.isEmpty() && dqcost.getLast()>dp[i]) {
- dqcost.remove();
- dqindex.remove();
- }
- dqcost.add(dp[i]);
- dqindex.add(i);
- }
- for(int i =K+1;i<N;i++) {
- if(!dqindex.isEmpty() && dqindex.getFirst()<i-K-1) {
- dqcost.remove();
- dqindex.remove();
- }
- dp[i] = P[i] + dqcost.getFirst();
- while(!dqcost.isEmpty() && dqcost.getLast()>dp[i]) {
- dqcost.remove();
- dqindex.remove();
- }
- dqcost.add(dp[i]);
- dqindex.add(i);
- }
- int ans = 10000000;
- for(int i=N-K-1;i<N;i++) {
- if(ans > dp[i]) {
- ans = dp[i];
- }
- }
- return ans;
- }
- public static void main(String[] args) {
- int N,K;
- N = sc.nextInt();
- K = sc.nextInt();
- int[] P = new int[N];
- for(int i = 0;i<N;i++) {
- P[i] = sc.nextInt();
- }
- System.out.println(cuttingTime(N,K,P));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement