인수열 문제 보고서
8599 단어 귀속
예시를 관찰하면, 우리는 귀속 구조로 이 수열을 만들 것을 쉽게 생각할 수 있다.
pi(i≤k)p^i(i\leqk)pi(i≤k)를 미리 처리한 후 거꾸로 귀속시킨다. 각 층에 대해 지난번에 정적으로 매거했다면 이번에는 반대로 매거하고, 그렇지 않으면 정적으로 매거한다.
코드:
#include
using namespace std;
int n;
long long p[15];
int k[15];
long long f[15][61];
bool vis[15];
void dg(long long now,int i)
{
if (i == 0)
{
printf("%lld
",now);
return;
}
if (!vis[i])
{
for (int j = 0;j <= k[i];j ++)
dg(now * f[i][j],i - 1);
}
else
{
for (int j = k[i];j >= 0;j --)
dg(now * f[i][j],i - 1);
}
vis[i] = !vis[i];
}
int main()
{
scanf("%d",&n);
for (int i = 1;i <= n;i ++)
{
scanf("%lld%d",&p[i],&k[i]);
f[i][0] = 1;
for (int j = 1;j <= k[i];j ++)
f[i][j] = f[i][j - 1] * p[i];
}
dg(1,n);
return 0;
}