紫書 例題8-10 UVa 714 (二分答案)

這道題讓最大值最小, 顯然是二分答案

當題目求的是最大值最小, 最小值最大, 這個時候就要想到二分答案

為什么可以二分答案呢, 因為這個時候解是單調性的, 如果簡單粗暴一點

就全部枚舉一遍, 驗證答案。但是因為答案滿足單調性, 可以用二分的方法

來”枚舉“, 復雜度可以從n降到logn


開始我自己寫了一個, 但是WA, 后來看了劉汝佳的代碼, 發現要注意三點

(1)這道題的和的最大值會爆int, 要用long long。

養成看到題目的時候計算最大值看會不會爆int的習慣(int最大大概是2乘10的9次方)

(2)輸出的時候,因為是前面的子序列的和盡量小, 所以我自己寫的時候想到了從后

往前盡量取(貪心)來輸出, 但是沒有考慮到分成固定要分成k個。 所以要專門用一個remain


來控制分成子序列的個數, 不然子序列會分少。

(3) 二分開始時候的左端點一定要設為元素最大值, 我一開始有想到, 但是覺得好像

對答案沒有什么影響, 就懶得去求最大值, 就直接設為0, 然后就WA了。

事實上, 在判斷這個答案是否符合的時候(我的程序中的judge函數),這個key值

根本就小于元素的時候, 是可以通過的, 這個錯誤是非常難發現的, 所以要提前

處理, 也就是在一開始的時候最小的可能的答案就設為元素最大值

順便提一下, 我的程序中l--, 是因為我的二分的寫法是這么寫的。


#include<cstdio>
#include<cstring>
#include<algorithm>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std;typedef long long ll;
const int MAXN = 512;
int a[MAXN], board[MAXN], n, k;bool judge(ll key)
{ll num = 1, sum = 0;REP(i, 0, n){if(sum + a[i] <= key) sum += a[i];else {num++; sum = a[i];if(num > k) return false;}}return true;
}void print(ll key)
{memset(board, 0, sizeof(board));ll sum = 0, remain = k;for(int i = n - 1; i >= 0; i--){if(sum + a[i] > key || i + 1 < remain) sum = a[i], board[i+1] = 1, remain--;else sum += a[i];}printf("%d", a[0]);REP(i, 1, n){if(board[i]) printf(" /");printf(" %d", a[i]); }puts("");
}int main()
{int T;scanf("%d", &T);while(T--){ll l = 0, r = 0;scanf("%d%d", &n, &k);REP(i, 0, n) scanf("%d", &a[i]), r += a[i], l = max(l, (ll)a[i]);l--;while(l + 1 < r){ll mid = (l + r) / 2;if(judge(mid)) r = mid;else l = mid;}print(r);}return 0;	
} 


轉載于:https://www.cnblogs.com/sugewud/p/9819591.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254703.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254703.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254703.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

was not declared in this scope

“was not declared in this scope”是一個錯誤信息&#xff0c;在編譯的時候會遇到。其含義為標識符在其出現的地方是未被定義的。 出現該錯誤的時候&#xff0c;會同時把未定義的變量名顯示出來。比如如下程序&#xff1a; int main(){ printf("%d",i);//這個i是…

函數參數的傳遞問題(一級指針和二級指針)

函數參數的傳遞問題&#xff08;一級指針和二級指針&#xff09; [轉]原以為自己對指針掌握了&#xff0c;卻還是對這個問題不太明白。請教&#xff01; 程序1&#xff1a; void myMalloc(char *s) //我想在函數中分配內存,再返回 { s(char *) malloc(100); } void …

Win7下使用U盤安裝linux Ubuntu16.04雙系統圖文教程

Win7下使用U盤安裝linux Ubuntu16.04雙系統圖文教程 Ubuntu&#xff08;友幫拓、優般圖、烏班圖&#xff09;是一個以桌面應用為主的開源GNU/Linux操作系統&#xff0c;Ubuntu 是基于DebianGNU/Linux&#xff0c;支持x86、amd64&#xff08;即x64&#xff09;和ppc架構&#xf…

SynchronizationContext

SendOrPostCallback xxx vg > { Text "內部&#xff1a; "vg.ToString(); };dynamic vx new { a SynchronizationContext.Current, b xxx };Thread td new Thread(x >{dynamic tmp x;// SynchronizationContext ds x as SynchronizationContext;for (in…

CoDeSys的前世今生

&#xfeff;&#xfeff;工作以及網上看到不少人說&#xff0c;CoDeSys和西門子step7&#xff0c;在德國都屬于標準過程&#xff0c;牛逼的小朋友都可以用其編程&#xff0c;不知真假&#xff0c;相信無風不起浪&#xff0c;多少有些依據&#xff0c;看看國內清一色的日系編程…

UVALive 7324 ASCII Addition (模擬)

ASCII Addition題目鏈接&#xff1a; http://acm.hust.edu.cn/vjudge/contest/127407#problem/A Description Nowadays, there are smartphone applications that instantly translate text and even solve math problems if you just point your phone’s camera at them. You…

Eclipse中執行Ant腳本出現Could not find the main class的問題及解

試過了&#xff1a;https://blog.csdn.net/bookroader/article/details/2300337 但是不管用&#xff0c;偶然看到這篇沒有直接關系的 https://blog.csdn.net/jiuyueguang/article/details/9350753 聯想了一下。項目是JDK1.5&#xff0c;Eclipse是JDK1.8啟動&#xff0c;所以在R…

獲得變量的名稱獲得傳入參數的參數類型與堆棧中的函數名獲得變量的名稱

獲得變量的名稱 獲得變量的名稱函數 public static string GetVarName(Expression<Func<變量類型, 變量類型>> exp) public static string GetVarName_Int(Expression<Func<int, int>> exp){return ((MemberExpression)exp.Body).Member.Name;}使用時…

視頻通話研究002

還是關于視頻質量。經測試&#xff0c;在公網server使用SQCIF(128x98)進行視頻通話。2個client都是這個設置&#xff0c;感覺不出馬賽克&#xff0c;模糊嚴重&#xff0c;在一個手機client抓包&#xff0c;例如以下&#xff1a; 第1,2行是client發到server的數據&#xff1b;第…

實力打臉: 量子隱形傳輸與 “瞬間移動” 毫無關系

有兩個團隊已經在量子隱形傳輸研究領域創造了新的傳輸記錄&#xff1a;利用深不可測的量子力學知識將一個粒子的量子態迅速從一個位置遷移到另一個位置的粒子上。其中一個團隊采用這種方法&#xff0c;運用一種光學纖維將一個光子的量子態穿越加拿大西南部的一個城市&#xff0…

Android初級教程:使用xml序列器

之前備份短信的時候生成xml都是手動拼寫的&#xff0c;有一個問題&#xff1a;當短信里面存在</body>這樣的標簽的時候&#xff0c;最后結果就不是完整的xml文件&#xff0c;顯然出錯。但是&#xff0c;今天使用序列化器的方式&#xff0c;就能有效的解決上邊遇到的問題。…

架構師之我見

架構師之我見 2009-08-06 架構師是一個項目組的靈魂人物&#xff0c;他決定著整個系統的技術選型、整體架構以及模塊劃分&#xff0c;同時還可能擔當與領導層的溝通角色&#xff0c;從某種意義上來說&#xff0c;架構師在很大程度上決定著項目的成敗與否&#xff0c;正所謂火車…

KUKA 聲明變量時的幾點注意

臨時變量&#xff1a; 1、src文件中定義的局部變量&#xff0c;該種變量存在于內存中的棧上。子程序調用時&#xff0c;變量在棧上動態生成。調用結束后從棧中自動銷毀。 因為存在于棧上的原因&#xff0c;訪問該變量需要棧指針&#xff0c;所以該種變量無法在機器人程序運行時…

三個點擬合圓形的函數C#

三個點擬合圓形的函數 函數說明 public void FitCircleFromThreePoints(double 點1X, double 點1Y, double 點2X, double 點2Y, double 點3X, double 點3Y, out double 圓心X坐標, out double 圓心Y坐標, out double 圓形半徑大小)public void FitCircleFromThreePoints(doub…

poj3264Balanced Lineup(倍增ST表)

Balanced LineupTime Limit: 5000MS Memory Limit: 65536KTotal Submissions: 52328 Accepted: 24551Case Time Limit: 2000MSDescription For the daily milking, Farmer Johns N cows (1 ≤ N ≤ 50,000) always line up in the same order. One day Farmer John decides to …

LightOJ1283 Shelving Books(DP)

題目 Source http://www.lightoj.com/volume_showproblem.php?problem1283 Description You are a librarian. You keep the books in a well organized form such that it becomes simpler for you to find a book and even they look better in the shelves. One day you ge…

量子傳輸技術轉移一個人需要4500萬億年

看過《星際迷航》的朋友一定不會忘記這句經典的臺詞&#xff1a;斯科蒂&#xff0c;將我傳輸過去&#xff01;其中涉及到量子隱形傳輸的技術&#xff0c;可以把物體從三維時空一處傳輸到另一處。但可惜的是&#xff0c;這種看著非常炫的技術或許根本無法實現。 到目前為止&…

使用OutputDebugString幫助調試

使用OutputDebugString幫助調試 前面我已經介紹了使用TRACE來幫助我們調試&#xff0c;但使用TRACE有一個限制&#xff0c;只能在將程序DEBUG編譯狀態下才能使用&#xff0c;下面我們介紹OutputDebugString函數&#xff0c;通過它&#xff0c;可以在在DEBUG或RELEASE情況也可以…

leetcode-551-Student Attendance Record I(判斷是否出現連續幾個相同字符)

題目描述&#xff1a; You are given a string representing an attendance record for a student. The record only contains the following three characters: A : Absent.L : Late.P : Present.A student could be rewarded if his attendance record doesnt contain more t…

簡單實現

1.創建接口和實現類 &#xff08;模擬實現查詢天氣&#xff09; 接口&#xff1a; package com.learning.weather;/*** * weather 接口 &#xff1a;實現模擬wsdl*/ public interface WeatherInterface {/*** 查詢天氣* param name* return*/public String queryWeather(Strin…