Algorithm/dp

백준 1890 점프 c++ // dp, 배열순회dp, dp[next] += dp[cur]

Mini_96 2024. 4. 8. 19:25

https://www.acmicpc.net/problem/1890

 

1890번: 점프

첫째 줄에 게임 판의 크기 N (4 ≤ N ≤ 100)이 주어진다. 그 다음 N개 줄에는 각 칸에 적혀져 있는 수가 N개씩 주어진다. 칸에 적혀있는 수는 0보다 크거나 같고, 9보다 작거나 같은 정수이며, 가장

www.acmicpc.net

1. 의사코드

1. dp도 배열한칸씩 탐색하는것이다.

2. pass 조건을 잘 생각하면 된다.

3. dp[i][j]= 어쩌구 가 아닌 // d[next] +=d[cur] 형태로도 짤수가 있다.

 

2.전체코드

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
ll dp[104][104],a[104][104]; //오큰수의 갯수 [길이][시작숫자]
int n;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> n;
	
	for (int i = 0; i < n; ++i) {
		for (int j = 0; j < n; ++j) {
			cin >> a[i][j];
		}
	}

	dp[0][0] = 1;

	for (int i = 0; i <= 100; ++i) {
		for (int j = 0; j <= 100; ++j) {
			if (a[i][j] == 0) continue;
			if (dp[i][j] == 0) continue;
			int jump = a[i][j];
			if (i + jump <= 100) dp[i + jump][j] += dp[i][j];
			if (j + jump <= 100) dp[i][j + jump] += dp[i][j];
		}
	}

	cout << dp[n-1][n-1];

	return 0;
}