Deskripsi Untuk Soal Nomor 24 dan 25
Terdapat sebuah petak berbentuk persegi panjang yang memiliki 4 baris dan tak hingga kolom, setiap lokasi akan didefinisikan dengan (baris, kolom). Pak Dengklek (D) sedang berdiri di pojok kiri atas (1,1), dan Pak Ganesh (G) sedang berdiri di pojok kiri bawah (4,1) seperti pada gambar di bawah ini:

Mereka berdua secara bersama-sama dapat melangkah secara diagonal ke kolom sebelah kanan mereka, dengan syarat mereka berdua tetap berada dalam petak tersebut dan tidak saling bertabrakan. Mereka melanjutkan proses tersebut hingga tiba di kolom 3.
Berapa banyak cara berbeda untuk mereka berdua berjalan menuju ke kolom 5?
Jawaban: ……………. {tuliskan jawaban dalam bentuk angka saja}
Berapa banyak cara berbeda untuk mereka berdua berjalan menuju ke kolom 1357? Jawaban dalam modulo 7.
Jawaban: ……………. {tuliskan jawaban dalam bentuk angka saja}
Masuk untuk menulis jawaban
Ah iya benar terimakasih. udah saya edit
bisa ga kak, yg nomor 24 itu di tunjukin yang mana aja yg 25 itu,, soalnya saya dpt jawabnya 9,, mungkin saya yg salah ya??
menurut saya definisi dari tidak boleh bertabrakan adalah tidak boleh bergerak dengan saling menyilang
24. 9 cara,, bisa dihitung atau ditentukan dulu polanya,, polanya spt pada no 25 berikut :
25.
ke kolom 2 ad 1 cara,, dari 2 ke 3 ad 3 cara,, dr 3 ke 4 ada 1 cara,, dr 4 ke 5 ad 3 cara, dr 5 ke 6 ada 1 cara,, begitu strusnyaa
sehingga didapat pola
2 = 1
3 = 3
4 = 3
5 = 9
6 = 9
7 = 27
8 = 27
.
dst.
nah utk mencapai kolom 1357,, berarti dibagi 2 dulu utk menentukan 3 pangkat berapa. karena dp[1] dimulai dr angka 2, jadi 1357 dikurang dulu dg 1. karena selalu ad 2 kolom yg dikali 1, kemudian dikali 3,1,3,1,3 dst,, jadi pembulatan 1357 dibagi 2 harus kebawah. didapat {3^((1357-1) div 2)} mod 7.
jadinya (3^((1357-1) div 2))) mod 7
= 3^678 mod 7
= 1
Untuk kolom ke-3 bukan terhitung ada 4 cara?
Cara 1
Pak Dengklek: (1,1) -> (2,2) -> (1,3)
Pak Ganesh: (4,1) -> (3,2) -> (2,3)
Cara 2
Pak Dengklek: (1,1) -> (2,2) -> (1,3)
Pak Ganesh: (4,1) -> (3,2) -> (4,3)
Cara 3
Pak Dengklek: (1,1) -> (2,2) -> (3,3)
Pak Ganesh: (4,1) -> (3,2) -> (2,3)
Cara 4
Pak Dengklek: (1,1) -> (2,2) -> (3,3)
Pak Ganesh: (4,1) -> (3,2) -> (4,3)
Permasalahan ini dapat diselesaikan dengan pendekatan dynamic programming. State yang saya gunakan adalah kolom dan posisi Pak Dengklek dan Pak Ganesh saat berada pada kolom tersebut. Apabila posisi Pak Dengklek/Ganesh tidak memungkinkan pada kolom tersebut, yakni ketika di luar indeks 0-3 (hanya terdapat 4 baris) ataupun ketika posisi Pak Ganesh berada di atas Pak Dengklek (keduanya tidak boleh bersilangan), maka banyak kemungkinan untuk state tersebut adalah 0.
Implementasi: https://ideone.com/Q75CQB
#include <cstring>
#include <iostream>
using namespace std;
#define ll long long
ll memo[2000][4][4];
ll dp(int col, int drow, int grow) {
// row out of bound
if (drow < 0 || 4 <= drow || grow < 0 || 4 <= grow)
return 0;
// d crossed with g
if (grow <= drow)
return 0;
// first column
if (col == 1) {
if (drow == 0 && grow == 3)
return 1;
else
return 0;
}
if (memo[col][drow][grow] != -1)
return memo[col][drow][grow];
memo[col][drow][grow] = 0;
memo[col][drow][grow] += dp(col-1, drow-1, grow-1);
memo[col][drow][grow] += dp(col-1, drow-1, grow+1);
memo[col][drow][grow] += dp(col-1, drow+1, grow-1);
memo[col][drow][grow] += dp(col-1, drow+1, grow+1);
memo[col][drow][grow] = memo[col][drow][grow] % 7;
return memo[col][drow][grow];
}
int main() {
int N;
cin >> N;
memset(memo, -1, sizeof(memo));
ll ans = 0;
for (int i = 0; i < 4; i++)
for (int j = i+1; j < 4; j++)
ans += dp(N, i, j);
cout << ans % 7 << endl;
}
Who am i?
kalo saya ketemunya banyak pola pada kolom ke n = (bil.fibonacci ke-n)^2. untuk fibo(1)=1 dan fibo(2)=1.
saya nyari cara manual.. ngecek tiap kasus per kolom..
untuk no 24 saya jawab 25.
CMIIW
Bukannya 1357 mod 16=13(menunjuk ke bilangan 2)
Banyak konfigurasi(dalam mod 7)=2^2 mod 7=4
CMIIW