先看題目:
1.n個數排成一排,你可以任意選擇連續的若干個數,算出它們的和。問該如何選擇才能使得和的絕對值最小。
如:n=8時,8
個數如下:
1 2 3 4 5 6 7 8
-20 90 -30 -20 80 -70 -60 125
如果我們選擇1到4
這4個數,和為
20,還可以選擇6到
8這3個數,和為-5,
|-5|=5,
該方案獲得的和的絕對值最小。
輸入格式:
第一行輸入n
,表示數字的個數。接下來
n行描述這
n個數字。
輸出格式:
第一行輸出乙個整數,表示最小絕對值的和,第二行包含乙個整數表示形成該絕對值和最長序列的長度。
1<= n<=100000或者
2. n個數圍成一圈,要求從中選擇若干個連續的數(注意每個數最多只能選一次)加起來,問能形成的最大的和。
n<=100000
這樣的題目,一般可以用字首和來做。
以第一題為例子
我們設s[i]為前i個數字之和.那麼s[i]-s[j] (i>j) 就為j+1到i的數字之和。這樣我們就可以任意求出一段區間的和是多少。
在利用題目的條件,看看能不能利用字首和的性質。
還是對於第一題。我們把得到的字首和進行排序,那麼可以知道min就是答案。注意排序前加入乙個s[0]=0,因為s[i]-s[j] (i>j) 表示j+1到i的數字之和
因為字首和排序後。以i為一段的區間的最小絕對值一定是 min 這裡的n是i在排序以後的位置
用快排nlongn就能排好,加上o(n)的掃瞄。
一類求和問題 類歐幾里得
自 今天要來介紹的是用類歐幾里得演算法來解決一類求和問題。給出 n,a,b,c 對於每組資料,分別輸出 f,h,g 的值,答案對 998244353 取模。n leq 10 9 由於這三個函式是互相依賴的,所以我們將其放在乙個函式裡求解 分別算會產生大量的重複計算 include include u...
一類棋盤互不攻擊問題
一類棋盤互不攻擊問題 農夫三拳 seu drizzlecrj gmail.com 最近在sgu上做了一些棋盤上互不攻擊的題目,稍稍的總結一下 1.sgu 220 little bishops 以及 sgu 221 big bishops 問題 求n n的棋盤上放置k個互不攻擊的象的個數。解法 將棋盤...
Integer一類的比較問題
總體主要分為兩個方面 比較的是值 一 基本資料型別與引用資料型別進行比較時,引用資料型別會進行拆箱 自動拆裝箱需要在jdk1.5以上 然後與基本資料型別進行值的比較 舉例 int i 12 integer j new integer 12 i j 返回的是true 二 引用資料型別與基本資料型別進行...