제출 #1353929

#제출 시각아이디문제언어결과실행 시간메모리
1353929jumpJump (BOI06_jump)C++20
100 / 100
3 ms1092 KiB
#include <bits/stdc++.h>
#define int long long
#include <bits/stdc++.h>

class Num {
	std::string num;

public:
	Num() : num("0") {}
	Num(const std::string& s) : num(s) {}

	void normalize() {
		int i = 0;
		while (i + 1 < (int)num.size() && num[i] == '0') i++;
		num = num.substr(i);
	}

	Num& operator+=(const Num& o) {
		std::string a = num;
		std::string b = o.num;

		if (b.size() > a.size()) std::swap(a, b);

		int n = a.size();
		int m = b.size();

		std::string res = a;
		int carry = 0;

		for (int i = 0; i < n; i++) {
			int da = a[n - 1 - i] - '0';
			int db = (i < m ? b[m - 1 - i] - '0' : 0);

			int sum = da + db + carry;
			res[n - 1 - i] = char('0' + (sum % 10));
			carry = sum / 10;
		}

		if (carry) {
			res = char('0' + carry) + res;
		}

		num = res;
		normalize();
		return *this;
	}
	Num operator+(const Num& o) const {
		Num res = *this;
		res += o;
		return res;
	}
	void print() const {
		std::cout << num;
	}
};
int n,in;
Num dp[120][120];
signed main() {
	std::cin >> n;
	dp[0][0]=Num("1");
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			std::cin >> in;
			if(in==0)continue;
			dp[i+in][j]+=dp[i][j];
			dp[i][j+in]+=dp[i][j];
			
		}
	}
	dp[n-1][n-1].print();
}
#Verdict Execution timeMemoryGrader output
Fetching results...