最近,瓦西亞決定提高他的手槍射擊技能。今天,他的教練為他提供了以下鍛鍊。他在桌子上連續放置了n個罐頭。罐從1到n從左到右編號。 vasya必須將每個罐子擊倒一次才能完成練習。允許他選擇將罐子打倒的順序。 vasya知道ii罐的耐久性是ai。這意味著,如果vasya已經將x罐擊倒,並且現在準備開始射擊第i罐,那麼他將需要(ai⋅x+ 1)槍才能將其擊倒。您可以假設,如果vasya開始射擊ii-罐,他將一直射擊直到將其擊倒。 您的任務是選擇這樣的射擊順序,以使將給定的n個罐中的每個精確擊倒一次所需的射擊次數最小化。輸入
輸入的第一行包含乙個整數nn(2≤n≤1000)-罐數。 輸入的第二行包含序列a1,a2,…,ana1,a2,…,an(1≤ai≤1000),其中ai是第i個罐的耐用性。輸出
在第一行列印中,將給定的n個罐中的每乙個準確地擊倒一次所需的最少射擊次數。examples在第二行列印中,由n個從1到n的整數組成的序列-罐的索引順序使所需的注射次數最小化。如果有多個答案,則可以列印其中任何乙個。
input320 10 20
output
431 3 2
input410 10 10 10
output
642 1 4 3
input65 4 5 4 4 5
output
696 1 3 5 2 4
input注釋21 4
output
32 1
在第乙個示例中,vasya可以從第乙個罐頭開始射擊。他以第一槍將其擊倒,因為他之前沒有擊倒任何其他罐頭。之後,他必須射擊第三罐。為了擊倒它,他射擊了20⋅1+ 1 =21次。在那之後僅剩一秒鐘。瓦薩亞擊倒它的次數是10⋅2+ 1 =21次。因此,總拍攝數量為1 + 21 + 21 = 43。 在第二個示例中,拍攝順序無關緊要,因為所有罐子都具有相同的耐用性。這道題當時繞了我好久,得有半個小時啊啊啊啊,交錯了四次,搞得我很崩潰。
#include
#include
#include
// *start on @date: 2020-02-14 14:20
using
namespace std;
typedef
long
long ll;
typedef
unsigned
long
long ull;
int maxn =
-999999
;int minn =
999999
;int
main()
;int x[
1001]=
; j=m;
while
(m--
)int flag[
1001]=
; n=0;
int p =0;
for(i=
1000
;i>=
0;i--)if
(s[i]!=0
)}s[i]--;
break;}
k =1;
for(i=
1000
;i>=
0;i--)}
s[i]--;
sum = sum +
(k*i+1)
; i++
;k++;}
} cout << sum+
1
0;i) cout
}
第六次訓練 H題
問題簡述 可樂的體積為s,同時有容量m,n s n m 的兩個杯子,三個容器間可相互倒可樂,問能否得到兩杯體積相等的可樂,若能,則輸出最短步驟數。問題分析 遵循無刻度的倒水原則,s為奇數時必然不行,可以先剪枝剪掉。而三個杯子的倒水方向可以有6種,可以使用bfs向六個方向搜尋,尋找最短路徑,當三個容器...
第六次訓練 J題
問題簡述 有一塊草坪長為l,寬為w,同時有n個噴頭,給出噴頭的位置 距離草坪左端的距離 與噴頭噴灑的範圍,問噴頭的範圍能否覆蓋整塊草坪,若能,輸出要開的最少噴頭數,若不能,輸出 1。問題分析 典型的區間覆蓋問題。但該問題為二維問題,難度在於如何將二維問題轉化為一維問題,從而用簡單的一維區間覆蓋解決問...
第六次作業
姓名 陳裕坤 學號 120705213 班級 12電信2班 作業1 總結,到目前為止,c語言基礎知識已介紹完,下一階段重點是指標。請從以下幾個方面小結 1.程式設計重在實踐,多程式設計才會對其理解更深,我是如何學習c語言的?2.程式設計涉及到方方面面知識,就像英語單詞一樣,一開始不可能了解每個c元素...