Cod sursa(job #2581571)

Utilizator suntbossgiani kirita suntboss Data 15 martie 2020 14:52:52
Problema NumMst Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream f("nummst.in");
ofstream g("nummst.out");

int n,i,cmmdc,k;
double dp[465][3205];
int ant[465][3205];
int prim[465];
bool nueprim[3650];
int main()
{
f>>n;
for( i=2;i<=n;i++)
{
    if(n%i==0)
    {
        //g<<n/i<<" "<<n-n/i;
        cmmdc=n/i;
        break;
    }
}
n=n/cmmdc;

prim[++k]=2;
for( i=3;i<=n;i+=2)
{
    if(nueprim[i]==0)
    {
        prim[++k]=i;
        for(int j=i*2;j<=n;j+=i)
        {
            nueprim[j]=1;
        }
    }
}
for( i=1;i<=k;i++)
{

    for(int j=1;j<=n;j++)
    {
        dp[i][j]=dp[i-1][j];
    }
      if(prim[i]>n)
      {
          break;
      }
      int val=prim[i];
      while(val<=n)
      {
          for(int j=0;j<=n-val;j++)
          {
              if(dp[i-1][j]+log(val)>dp[i][j+val])
              {
                  dp[i][j+val]=dp[i-1][j]+log(val);
                  ant[i][j+val]=val;

              }
          }
          val=val*prim[i];
      }
}

 i=k-1;
 //cout<<i<<" ";
while(i>0)
{
    if(ant[i][n]>0){
    g<<cmmdc*ant[i][n]<<" ";
    n=n-ant[i][n];

}
i--;
}
if(n!=0)
{
    g<<n*cmmdc;
}
}