Pekerjaan saya adalah menumpuk kerikil menjadi tumpukan segitiga. Saya hanya melakukan ini selama satu abad dan itu sudah cukup membosankan. Bagian terburuknya adalah saya memberi label setiap tumpukan. Saya tahu cara menguraikan kerikil menjadi tumpukan dengan ukuran maksimal , tetapi saya ingin meminimalkan jumlah tumpukan. Dapatkah kamu menolong?
Tugas
Diberikan bilangan bulat, dekomposisikan ke dalam jumlah minimum angka segitiga , dan hasilkan angka minimum itu.
Bilangan Segitiga
Angka segitiga adalah angka yang dapat dinyatakan sebagai jumlah dari n
bilangan asli pertama , untuk beberapa nilai n
. Demikianlah beberapa angka segitiga pertama
1 3 6 10 15 21 28 36 45 55 66 78 91 105
Contoh
Sebagai contoh, katakanlah inputnya 9
. Ini bukan bilangan segitiga, sehingga tidak dapat dinyatakan sebagai jumlah 1
bilangan segitiga. Dengan demikian jumlah minimum bilangan segitiga adalah 2
, yang dapat diperoleh dengan [6,3]
, menghasilkan output yang benar 2
.
Sebagai contoh lain, katakanlah inputnya 12
. Solusi yang paling jelas adalah dengan menggunakan algoritma serakah dan menghapus angka segitiga terbesar pada suatu waktu, menghasilkan [10,1,1]
dan menghasilkan 3
. Namun, ada solusi yang lebih baik [6,6]
:, menghasilkan output yang benar 2
.
Uji Kasus
in out
1 1
2 2
3 1
4 2
5 3
6 1
7 2
8 3
9 2
10 1
11 2
12 2
13 2
14 3
15 1
16 2
17 3
18 2
19 3
20 2
100 2
101 2
5050 1
Aturan
- Bilangan bulat input adalah antara 1 dan bilangan bulat maksimum bahasa Anda.
- Saya dapat meniru bahasa apa pun dengan kerikil saya , dan saya ingin kode Anda sekecil mungkin karena saya tidak punya apa-apa selain kerikil untuk melacaknya. Jadi ini adalah kode-golf , jadi kode terpendek di setiap bahasa menang.
n = 12
).