zoukankan      html  css  js  c++  java
  • 【Codeforces 467C】George and Job

    【链接】 我是链接,点我呀:)
    【题意】

    让你从1..n这n个数字中 选出来k个不相交的长度为m的区间 然后这个k个区间的和最大 求出这k个区间的和的最大值

    【题解】

    设dp[i][j]表示前i个数字已经选出了j个区间的最大值 看看是以当前位置为结尾选择一个区间,还是这个位置不包括在任何一个区间里. 分这两种情况转移就好

    【代码】

    import java.io.*;
    import java.util.*;
    
    public class Main {
        
        
        static InputReader in;
        static PrintWriter out;
            
        public static void main(String[] args) throws IOException{
            //InputStream ins = new FileInputStream("E:\rush.txt");
            InputStream ins = System.in;
            in = new InputReader(ins);
            out = new PrintWriter(System.out);
            //code start from here
            new Task().solve(in, out);
            out.close();
        }
        
        static int N = 5000;
        static class Task{
            
            int n,m,k;
            int a[];
            long sum[];
            long dp[][];
            
            long get_sum(int l,int r) {
            	return sum[r]-sum[l-1];
            }
            
            public void solve(InputReader in,PrintWriter out) {
            	n = in.nextInt();m = in.nextInt();k = in.nextInt();
            	a = new int[N+10];
            	sum = new long[N+10];
            	dp = new long[N+10][N+10];
            	
            	for (int i = 1;i <= n;i++) {
            		a[i] = in.nextInt();
            	}
            	for (int i = 1;i <= n;i++) sum[i]=sum[i-1]+a[i];
            	long ans = 0;
            	dp[0][0] = 0;
            	for (int i = 1;i <= n;i++)
            		for (int j = 0;j <= Math.min(k, i);j++) {
            			if (j==0) {
            				dp[i][j] = Math.max(dp[i][j], dp[i-1][j]);
            			}else {
            				if (i-m>=0) {
            					dp[i][j] = Math.max(dp[i][j], dp[i-m][j-1]+get_sum(i-m+1,i));
            					dp[i][j] = Math.max(dp[i][j], dp[i-1][j]);
            				}
            			}
            			ans = Math.max(ans, dp[i][j]);
            		}
            	out.println(ans);
            }
        }
    
        
    
        static class InputReader{
            public BufferedReader br;
            public StringTokenizer tokenizer;
            
            public InputReader(InputStream ins) {
                br = new BufferedReader(new InputStreamReader(ins));
                tokenizer = null;
            }
            
            public String next(){
                while (tokenizer==null || !tokenizer.hasMoreTokens()) {
                    try {
                    tokenizer = new StringTokenizer(br.readLine());
                    }catch(IOException e) {
                        throw new RuntimeException(e);
                    }
                }
                return tokenizer.nextToken();
            }
            
            public int nextInt() {
                return Integer.parseInt(next());
            }
        }
    }
    
  • 相关阅读:
    选择排序
    散列冲突解决方案
    string stringbuffer StringBuilder
    java关键字
    Vector
    What is the difference between book depreciation and tax depreciation?
    Type of Asset Books in Oracle Fixed Assets
    questions
    Oracle Express 11g
    iot
  • 原文地址:https://www.cnblogs.com/AWCXV/p/10392256.html
Copyright © 2011-2022 走看看