728x90
https://www.acmicpc.net/problem/13555
17409 - 증가 수열의 개수와 풀이가 같다.
다만 17409와 달리 원소의 상한과 수열의 길이가 불일치라는 것과 세그먼트 트리가 아닌 펜윅 트리로만 풀린다는 점을 유의하여 구현하도록 한다.
전체 코드
더보기
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#include <bits/stdc++.h>
using namespace std;
#define mod 5000000
int n, k;
int dp[51][100001];
int sum(int pos, int seq)
{
if (!seq)
return 1;
int ret = 0;
while (pos)
{
ret += dp[seq][pos];
ret %= mod;
pos &= (pos - 1);
}
return ret;
}
void add(int pos, int seq, int val)
{
while (pos <= 100000)
{
dp[seq][pos] += val;
dp[seq][pos] %= mod;
pos += (pos & -pos);
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> k;
for (int i = 1; i <= n; ++i)
{
int x;
cin >> x;
for (int j = 1; j <= k; ++j)
add(x, j, sum(x - 1, j - 1));
}
cout << sum(100000, k);
}
728x90
'백준 > DP' 카테고리의 다른 글
[KOI] 백준 2616 - 소형기관차 (0) | 2021.11.05 |
---|---|
[KOI] 백준 2169 - 로봇 조종하기 (0) | 2021.08.21 |
백준 17409 - 증가 수열의 개수 (0) | 2021.07.22 |
백준 18249 - 욱제가 풀어야 하는 문제 (0) | 2021.07.19 |
백준 2399 - 거리의 합 (0) | 2021.05.09 |