hihoCoder 1051 补提交卡 最详细的解题报告
题目来源:补提交卡
解题思路:假设未提交程序的天数为:a1,a2,....,an,补交的张数为M。依次从a1,a2,....,an中去掉连续的 K 天(0<=K<=M),然后再来计算剩余数组中最长连续提交天数。
具体算法(Java版,直接AC)
 import java.util.Scanner;
 public class Main {
     //计算数组中最长连续提交天数
     public static int getMax(int[] array) {
         int[] copy = new int[array.length + 2];
         copy[0] = 0;
         copy[array.length + 1] = 101;
         for (int i = 0; i < array.length; i++) {
             copy[i + 1] = array[i];
         }
         int max = Integer.MIN_VALUE;
         for (int i = 1; i < copy.length; i++) {
             int sum = copy[i] - copy[i - 1] - 1;
             max = max > sum ? max : sum;
         }
         return max;
     }
     //从下标为start开始,删除长度为count个元素
     public static int[] remove(int[] array, int count, int start) {
         int[] copy = new int[array.length - count];
         int index = 0;
         for (int i = 0; i < start; i++) {
             copy[index++] = array[i];
         }
         for (int i = start + count; i < array.length; i++) {
             copy[index++] = array[i];
         }
         return copy;
     }
     //计算使用k张补交卡后,最长连续提交天数
     public static int solve(int[] array, int k) {
         int max = Integer.MIN_VALUE;
         for (int i = 0; i <= array.length - k; i++) {
             int sum = getMax(remove(array, k, i));
             max = max > sum ? max : sum;
         }
         return max;
     }
     public static void main(String[] args) {
         Scanner scanner = new Scanner(System.in);
         int T = scanner.nextInt();
         while (T > 0) {
             int N = scanner.nextInt();
             int M = scanner.nextInt();
             int[] array = new int[N];
             for (int i = 0; i < N; i++) {
                 array[i] = scanner.nextInt();
             }
             int max = Integer.MIN_VALUE;
             for (int i = 0; i <= M; i++) {
                 int sum = solve(array, i);
                 max = sum > max ? sum : max;
             }
             System.out.println(max);
             --T;
         }
     }
 }
hihoCoder 1051 补提交卡 最详细的解题报告的更多相关文章
- hihoCoder 1051 补提交卡(贪心,枚举)
		
#1051 : 补提交卡 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho给自己定了一个宏伟的目标:连续100天每天坚持在hihoCoder上提交一个程序.100天过 ...
 - hihoCoder 1051 : 补提交卡 枚举
		
思路:预处理cnt(i)表示前i个数中有多少天需要补提交卡,枚举各个连续区间,区间[j, i]中需要补提交卡的天数是cnt(i) - cnt(j-1),判断m是否大于等于cnt(i) - cnt(j- ...
 - hihoCoder#1051 补提交卡
		
原题地址 简单贪心 首先,补提交卡应该连续使用,其次,补提交卡应该全部用掉(如果补提交卡多于未提交天数则额外处理) 所以,依次遍历未提交日期,计算:从当前位置开始,用M张补提交卡覆盖后面连续M个数字, ...
 - hihoCoder  1051补提交卡(贪心 枚举)
		
http://hihocoder.com/problemset/problem/1051 既然要选择最长连续提交天数,那么提交卡必须连续使用才有可能得到最优解,这样贪心,然后从头到尾扫一遍求出最大值. ...
 - hihocoder 在线测试 补提交卡 (Google)
		
题目1 : 补提交卡 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho给自己定了一个宏伟的目标:连续100天每天坚持在hihoCoder上提交一个程序.100天过去 ...
 - hihoCoder 1049 后序遍历 最详细的解题报告
		
题目来源:后序遍历 解题思路:开始时我只知道先通过先序.中序求出二叉树,然后再后序遍历二叉树,这当然也是一种解题思路,但是会做一些无用功,比如:计算二叉树.其实,可以直接通过先序序列和中序序列直接求出 ...
 - HihoCoder - 1051:补提交卡
		
时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho给自己定了一个宏伟的目标:连续100天每天坚持在hihoCoder上提交一个程序.100天过去了,小Ho查看自己的提交 ...
 - 【面试笔试算法】Problem 7: 补提交卡(hiho题库)
		
时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho给自己定了一个宏伟的目标:连续100天每天坚持在hihoCoder上提交一个程序.100天过去了,小Ho查看自己的提交 ...
 - hiho模拟面试题2 补提交卡 (贪心,枚举)
		
题目: 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描写叙述 小Ho给自己定了一个雄伟的目标:连续100天每天坚持在hihoCoder上提交一个程序.100天过去了.小Ho查 ...
 
随机推荐
- Ubuntu18.04下使用Hexo框架搭建个人博客
			
一.安装node.js 说明:安装node.js的原因:Hexo框架是基于node.js. 1.推荐使用nvm安装速度快,也可自行百度其它方法. wget -qO- https://raw.githu ...
 - Fibonacci(模板)【矩阵快速幂】
			
Fibonacci 题目链接(点击) Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20989 Accepted: 14 ...
 - rust 学习之旅一, rust编程环境相关
			
Mac rust环境 rust安装: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh rust更新: rustup upd ...
 - cb46a_c++_STL_算法_逆转和旋转reverse_rotate函数advance
			
cb46a_c++_STL_算法_逆转和旋转reverse_rotateSTL算法--变序性算法reverse() 逆转reverse_copy()一边复制一般逆转rotate()旋转,某个位置开始前 ...
 - MFC exe文件生成的图标更改方法
			
MFC exe文件生成的图标更改方法 https://blog.csdn.net/txwtech/article/details/92980545
 - 设计模式系列之组合模式(Composite Pattern)——树形结构的处理
			
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
 - Java-CORBA
			
本文HelloCorba参考 Getting Started with JavaTM IDL 说在前面 Java TM IDL is a technology for distributed obje ...
 - spring框架中JDK和CGLIB动态代理区别
			
转载:https://blog.csdn.net/yhl_jxy/article/details/80635012 前言JDK动态代理实现原理(jdk8):https://blog.csdn.net/ ...
 - 2、尚硅谷_SSM高级整合_使用ajax操作实现页面的查询功能
			
16.尚硅谷_SSM高级整合_查询_返回分页的json数据.avi 在上一章节的操作中我们是将PageInfo对象存储在request域中,然后list页面解析request域中的对象实现信息的显示. ...
 - redis基础二----操作List类型
			
1.lpush的使用方法 2.rpsuh的使用方法 3.删除元素 lrem中2值的是删除2个集合中的“b”元素 4. 通过上面的分析,redis中的list比较类型java的qunue队列