题目1502:最大值最小化(二分答案)

九度OJ

Java

  1. import java.util.Scanner;
  2.  
  3. public class Main {
  4.  
  5. public static int max(int x ,int y){
  6. return x > y ? x : y;
  7. }
  8.  
  9. public static int solve(int tot , int m , int n ,int a[]){
  10. int low = 1 , high = tot;
  11. while(low <= high){
  12. int mid = (low + high) / 2;
  13. int i = 1 , count = 0 , k , flag = 1 ;
  14. while(i <= m){
  15. if(a[i] > mid){
  16. flag = 0; break;
  17. }
  18. int sum = 0;
  19. for(k = i; k <= m; k++){
  20. sum += a[k];
  21. if(sum > mid) break;
  22. }
  23. i = k;
  24. count++;
  25. }
  26. if(flag == 0 || count > n) low = mid + 1;
  27. else if(count == n) high = mid - 1;
  28. else high = mid - 1;
  29. /*
  30. if(count <= n) high = mid - 1;
  31. else low = mid + 1;
  32. */
  33. }
  34. return max(low , high);
  35. }
  36. public static void main(String[] args){
  37. final int N = 510 , M = 510;
  38. int cas,n,m,tot;
  39. int[] a = new int[M];
  40. Scanner cin = new Scanner(System.in);
  41. cas = cin.nextInt();
  42. while((cas--) != 0){
  43. m = cin.nextInt();
  44. n = cin.nextInt();
  45. tot = 0;
  46. for(int i = 1; i <= m; i++){
  47. a[i] = cin.nextInt();
  48. tot += a[i];
  49. }
  50. int res = solve(tot,m,n,a);
  51. System.out.println(res);
  52. }
  53. }
  54. }

C++

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. using namespace std;
  5. #define N 510
  6. #define M 510
  7.  
  8. int a[M],tot;
  9.  
  10. int main()
  11. {
  12. int cas,n,m;
  13. scanf("%d",&cas);
  14. while(cas--)
  15. {
  16. tot = ;
  17. scanf("%d%d",&m,&n);
  18. for(int i=; i<=m; i++)
  19. scanf("%d",&a[i]) , tot += a[i];
  20. int low = , high = tot , mid;
  21. while(low <= high)
  22. {
  23. mid = (low + high) >> ;
  24. int i = , k , count = , ok = ;
  25. while(i<=m)
  26. {
  27. if(a[i] > mid)
  28. { ok = ; break;}
  29. int sum = ;
  30. for(k=i; k<=m; k++)
  31. {
  32. sum += a[k];
  33. if(sum > mid) break;
  34. }
  35. i = k;
  36. count++;
  37. }
  38. if(!ok || count > n) low = mid + ;
  39. else if(count == n) high = mid - ;
  40. else high = mid - ;
  41. }
  42. printf("%d\n",max(low,high));
  43. }
  44. }

九度OJ 1502 最大值最小化(JAVA)的更多相关文章

  1. 九度OJ 1187:最小年龄的3个职工 (排序)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2291 解决:936 题目描述: 职工有职工号,姓名,年龄.输入n个职工的信息,找出3个年龄最小的职工打印出来. 输入: 输入第一行包括1个 ...

  2. 九度OJ 1020:最小长方形 (基础题)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6019 解决:2849 题目描述:     给定一系列2维平面点的坐标(x, y),其中x和y均为整数,要求用一个最小的长方形框将所有点框在 ...

  3. 九度OJ 1086:最小花费 (DP)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3960 解决:819 题目描述: 在某条线路上有N个火车站,有三种距离的路程,L1,L2,L3,对应的价格为C1,C2,C3.其对应关系如下 ...

  4. 九度OJ 1102:最小面积子矩阵 (DP、缓存、剪枝)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1666 解决:504 题目描述: 一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵(矩阵中元素个数为矩阵面积) 输入: ...

  5. 九度OJ 1209:最小邮票数 (遍历)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2252 解决:741 题目描述: 有若干张邮票,要求从中选取最少的邮票张数凑成一个给定的总值.     如,有1分,3分,3分,3分,4分五 ...

  6. 九度OJ 1371 最小的K个数 -- 堆排序

    题目地址:http://ac.jobdu.com/problem.php?pid=1371 题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4 ...

  7. 【九度OJ】题目1191:矩阵最大值 解题报告

    [九度OJ]题目1191:矩阵最大值 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1191 题目描述: 编写一个程序输入一个mXn的 ...

  8. 【九度OJ】题目1187:最小年龄的3个职工 解题报告

    [九度OJ]题目1187:最小年龄的3个职工 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1187 题目描述: 职工有职工号,姓名, ...

  9. 【九度OJ】题目1438:最小公倍数 解题报告

    [九度OJ]题目1438:最小公倍数 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1438 题目描述: 给定两个正整数,计 ...

随机推荐

  1. Atitit..组件化事件化的编程模型--(2)---------Web datagridview 服务器端控件的实现原理and总结

    Atitit..组件化事件化的编程模型--(2)---------Web datagridview 服务器端控件的实现原理and总结 1. 服务端table控件的几个流程周期 1 1.1. 确认要显示 ...

  2. atitit.ajax bp dwr 3.的注解方式配置使用流程总结 VO9o.....

    atitit.ajax bp dwr 3.的注解方式配置使用流程总结 VO9o..... 1. 安装配置 1 1.1. 下载  dwr.jar 1M 1 1.2. 配置注解方式..web.xml 1 ...

  3. 写hive db的两种方法

    方法1tmp_channel_hive_file="/tmp/tmp_channel_hive_file"tmp_channel_hive_file_new="/tmp/ ...

  4. ES5 数组方法reduce

    reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始合并,最终为一个值. 参数 callback 执行数组中每个值的函数,包含四个参数 previou ...

  5. Android中Parcelable接口的使用

    在做开发的过程中,序列化是非常常见的.比如要将对象保存本地磁盘或者在网络上传输等.实现序列化有两种方式,一种是实现Serializable接口,第二种是实现Parcelable. Serializab ...

  6. 制作6寸 kindle pdf

    设置word 纸张大小为 90mm*117mm 然后保存为 pdf 就好了.

  7. Socket编程基本流程实践

    通讯基本流程图如下所示: Server端代码(ServerDemo.cpp): #include <WinSock2.h> #include <Windows.h> #incl ...

  8. win7下虚拟机安装mac 转载自 http://itbbs.pconline.com.cn/50602805.html

    最近,不断有人问起,如何在vmware下安装MAC系统.起因是以前曾发过一篇贴,在vmware8下安装MAC的方法.于是,重新下载了最新版苹果系统10.8.5,终于成功安装.现将注意事项及过程与各位朋 ...

  9. Opengl的gl_NormalMatrix【转】

    原文地址:http://blog.csdn.net/ichild1964/article/details/9728357 参考:http://www.gamedev.net/topic/598985- ...

  10. [Lua]50行代码的解释器,用来演示lambda calculus

    嗯,来写写经过: 在知乎上看见用Belleve牛用javascript写了一个精简的lisp解释器 => 我也想写一个,用lua写,能多简单呢? => 写了一个阉割的scheme解释器,包 ...