인수열 문제 보고서

8599 단어 귀속
원본 주소:https://acm.ecnu.edu.cn/contest/292/problem/E/
예시를 관찰하면, 우리는 귀속 구조로 이 수열을 만들 것을 쉽게 생각할 수 있다.
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; }

좋은 웹페이지 즐겨찾기