題目描述
洛谷 p3878 [tjoi2010]分金幣
現在有n
nn枚金幣,它們可能會有不同的價值,現在要把它們分成兩部分,要求這兩部分金幣數目之差不超過1
11,問這樣分成的兩部分金幣的價值之差最小是多少?
輸入輸出格式
輸入格式:
每個輸入檔案中包含多組測試資料,輸入檔案的第一行是乙個正整數t
tt,用來說明檔案中有多少組測試資料。接下來將依次給出所有測試資料的描述,每組測試資料的第一行是乙個正整數n
nn,表示共有n
nn枚金幣。第二行有n
nn個正整數v
iv_i
vi,分別給出每一枚金幣的價值。
輸出格式:
對每一組輸入資料,輸出乙個非負整數,表示分成的兩部分金幣的價值差別的最小值。
輸入輸出樣例
輸入樣例#1:
2 223
332222
224444
441112
223
33 $
輸出樣例#1:
0 002
22
說明
對3030
30%的資料,1≤v
i≤
1000
1 ≤ v_i ≤ 1000
1≤vi≤
1000
對100
10010
0%的資料,1≤n
≤30
1 ≤ n ≤ 30
1≤n≤30
,1 ≤v
i≤
2301 ≤ vi ≤ 230
1≤vi≤2
30,t ≤20
t ≤ 20
t≤20
每個測試點時限111秒
注意:對於使用c/c
++
c/c++
c/c+
+語言的選手,若需使用64
6464
位整型數,應宣告為lon
glon
glong long
longlo
ng,若需使用sca
nf()
/pri
ntf(
)/fs
canf
()/f
prin
tf()
scanf()/printf()/fscanf()/fprintf()
scanf(
)/pr
intf
()/f
scan
f()/
fpri
ntf(
)等系列函式,應配合使用"
"%lld"
"標記符進行lon
glong
long
l on
glong
long
型別的輸入輸出。
可以發現這個題就是讓我們在所有的組合中找出乙個最優解來,而n≤12
n \leq12
n≤12
的資料範圍很適合我們使用模擬退火。
我們可以把金幣分為前後兩堆,然後不斷在這兩堆金幣中選出2
22枚,在調換它們的位置,接著計算出當前狀態下前後兩堆金幣的價值差來確定最小值了。
**如下:
#include
using
namespace std;
const
int maxn=30;
const
double eps=
1e-14
;const
double r=
0.98
;int n,ans;
int a[maxn]
;inline
intread()
while
(ch>=
'0'&&ch<=
'9')
if(flag)
return x;
return
~(x-1)
;}inline
intcalc()
inline
voidsa(
)}intmain()
return0;
}
洛谷P3842 TJOI2007 線段 題解
在乙個 n n n times n n n 矩陣中每一行都有一條線段,找出從 1,1 1,1 1,1 出發不重不漏地遍歷每一條線段並走到 n,n n,n n,n 結束所需的步數。使用 dp。考慮設 f i 0 1 f i 0 1 f i 0 1 表示當前以及遍歷完了第 i ii 行的線段,在左 0 ...
洛谷P3761 TJOI2017 城市
從加里敦大學城市規劃專業畢業的小明來到了乙個地區城市規劃局工作。這個地區一共有ri座城市,1條高速公路,保證了任意兩運城市之間都可以通過高速公路相互可達,但是通過一條高速公路需要收取一定的交通費用。小明對這個地區深入研究後,覺得這個地區的交通費用太貴。小明想徹底改造這個地區,但是由於上司給他的資源有...
洛谷P3976 TJOI2015 旅遊
為了提高智商,zjy 準備去往乙個新世界去旅遊。這個世界的城市布局像一棵樹,每兩座城市之間只有一條路徑可以互達。每座城市都有一種寶石,有一定的 zjy 為了賺取最高利益,她會選擇從 a 城市 再轉手賣到 b 城市。由於zjy買寶石時經常賣萌,因而凡是 zjy 路過的城市,這座城市的寶石 會 讓我們來...