メモ化
- const int N = 50 + 1;
- bool g[N][N];
- lli memo[N];
- lli rec(int n)
- {
- lli &ret = memo[n];
- if (ret != -1) return ret;
- lli sum = 0;
- for (int i = 0; i < (int)N; ++i) {
- if (g[n][i]) sum += rec(i);
- }
- return ret = max(1LL, sum);
- }
- class CorporationSalary {
- public:
- long long totalSalary(vector <string> R)
- {
- const int size = R.size();
- fill(&g[0][0], &g[N - 1][N], false);
- for (int i = 0; i < (int)size; ++i) {
- for (int j = 0; j < (int)size; ++j) {
- g[i][j] = R[i][j] == 'Y';
- }
- }
- fill(memo, memo + N, -1);
- lli sum = 0;
- for (int i = 0; i < (int)size; ++i) {
- sum += rec(i);
- }
- return sum;
- }
- };