Cod sursa(job #2527851)

Utilizator AlexPascu007Pascu Ionut Alexandru AlexPascu007 Data 20 ianuarie 2020 21:56:56
Problema NumMst Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <bits/stdc++.h>
#define DIM 10000010
using namespace std;
ifstream fin("nummst.in");
ofstream fout("nummst.out");
int n,i,j,k,p[510],nr,cnt,sol[510],divizor,poz,t[4010][510];
double d[4010][510],val;
bitset<DIM> f;
int main() {
    fin>>n;
    for (i=2;i<=n/i;i++)
        if (n%i==0)
            break;
    divizor=n/i, n=i;
    for (i=2;i<n;i++) {
        if (f[i]==0)
            p[++k]=i;
        for (j=2*i;j<=n;j+=i)
            f[j]=1;
    }
    for (j=1;j<=k;j++) {
        for (i=1;i<=n;i++)
            d[i][j]=d[i][j-1];
        nr=p[j];
        while (nr<=n) {
            val=log(nr);
            for (i=nr;i<=n;i++) {
                if (d[i-nr][j-1]+val>d[i][j]) {
                    d[i][j]=d[i-nr][j-1]+val;
                    t[i][j]=nr;
                }
            }
            nr*=p[j];
        }
    }
    i=n, poz=k;
    while (poz) {
        if (t[i][poz]) {
            sol[++cnt]=t[i][poz]*divizor;
            i-=t[i][poz];
        }
        poz--;
    }
    while (i--)
        sol[++cnt]=divizor;
    for (i=1;i<=cnt;i++)
        fout<<sol[i]<<" ";
    return 0;
}