Cod sursa(job #2527807)

Utilizator AlexPascu007Pascu Ionut Alexandru AlexPascu007 Data 20 ianuarie 2020 21:26:55
Problema NumMst Scor 8
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 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[510][4010];
double d[510][4010],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 (i=1;i<=k;i++) {
        for (j=1;j<=n;j++)
            d[i][j]=d[i-1][j];
        nr=p[i];
        while (nr<=n) {
            val=log(nr);
            for (j=nr;j<=n;j++)
                if (d[i-1][j-nr]+val>d[i][j]) {
                    d[i][j]=d[i-1][j-nr]+val;
                    t[i][j]=nr;
                }
            nr*=p[i];
        }
    }
    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;
}