Tantangan Diambil dengan izin dari Kontes Tantangan Kode Universitas saya
Ketergantungan yang kami miliki pada ponsel membuat kami mengisi ulang daya baterai setiap malam hingga tingkat maksimum baterai, sehingga kami tidak berisiko kehabisan daya pada pertengahan hari berikutnya. Bahkan ada orang yang, ketika mereka melihat outlet gratis di siang hari, menagih untuk apa yang mungkin terjadi.
Saya salah satunya.
Selama bertahun-tahun, saya telah menyempurnakan teknik saya untuk tidak mengisi baterai secara maksimal setiap malam. Dengan rutinitas berulang saya yang sangat dikenal, saya jelas pada jam berapa saya bisa melakukan pengisian ulang parsial (dan berapa unit level yang akan meningkat) dan apa yang menurunkan level baterai antara setiap pengisian. Dengan data ini, setiap malam saya menghitung tingkat baterai minimum yang harus saya tinggalkan di rumah pada hari berikutnya sehingga tidak pernah jatuh di bawah ambang batas yang saya tentukan sendiri dua unit.
Yang belum saya kuasai adalah perhitungan yang sama ketika saya meninggalkan rutinitas yang telah mapan dan saya memiliki beberapa alternatif untuk melakukan sesuatu. Itu terjadi, misalnya, pada hari-hari ketika saya sedang dalam perjalanan ke kota lain di mana saya dapat tiba dengan cara yang berbeda.
Dalam pendekatan pertama saya untuk masalah ini, saya berasumsi bahwa saya ingin bergerak di sekitar "papan catur", dari sudut kiri atas ke sudut kanan bawah. Di setiap "sel" saya dapat mengisi daya ponsel dalam jumlah tertentu, atau saya tidak bisa dan level bebannya turun.
Tantangan
Diberikan matriks bilangan bulat FxC, menampilkan jumlah level baterai minimal yang saya perlukan dari sudut kiri atas ke kanan bawah tanpa level beban turun di bawah 2 unit.
Dalam matriks, angka positif menunjukkan berapa banyak saya dapat mengisi daya ponsel saya sebelum saya harus melanjutkan mengikuti jalur saya, sementara angka negatif menunjukkan bahwa tidak ada outlet dan baterai ponsel menurunkan tingkat pengisiannya dengan jumlah itu. Dijamin bahwa jumlah di sel sumber dan tujuan (sudut kiri atas dan kanan bawah) selalu 0 dan bahwa sisa nilai (nilai absolut) tidak melebihi 100.
Contoh
Diberikan:
Jalur yang saya butuhkan lebih sedikit baterai adalah:
Dan jumlah level baterai minimal yang saya butuhkan adalah 4
Catatan
- Start akan selalu menjadi sudut kiri atas
- Akhir selalu menjadi sudut kanan bawah
- Anda tidak dapat pergi ke sel yang sudah Anda lewati. Contoh: Setelah berada di posisi (0,1), Anda tidak dapat pergi ke titik awal (0,0)
- Level baterai Anda tidak dapat (karena alasan apa pun) berada di bawah 2
- Anda bisa berasumsi akan selalu ada awal dan akhir
- Anda dapat menggunakan array 1 dimensi sebagai multidimensi jika perlu
[1,2,3] == [[1,2,3]]
- Mungkin ada beberapa jalur yang benar (biaya minimal diperlukan)
- Tujuan Anda adalah hanya menghasilkan tingkat baterai awal terendah yang diperlukan, bukan rute
- Anda hanya dapat pergi secara vertikal dan horizontal (tidak diagonal)
Uji Kasus
[0, 0] => 2
[0, 1, 0] => 2
[0, -1, 0] => 3
[0, 15, -20, 5, 0] => 7
[[0, -3],[-5, 0]] => 5
[[0, -5, -9, 5], [-3, 5, 2, -2], [2, -4, -4, 0]] => 5
[[0, -1, 1, -1], [-1, -1, -1, -1], [-1, 1, -1, -1], [1, 1, -1, 0]] => 4
[[0,1,-1],[-9,-9,1],[-9,1,-1],[-9,-1,-9],[-9,1,0]]
0s
ditempatkan satu di sudut kiri atas dan yang lain di kanan bawah