Cod sursa(job #3162486)

Utilizator AlexanderCernyCernaianu Alexandru AlexanderCerny Data 29 octombrie 2023 12:38:26
Problema Economie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <fstream>
#include <algorithm>
#include <climits>

using namespace std;

ifstream fin ("economie.in");
ofstream fout("economie.out");

int n,i,j,v[1001];
int dp[50001];
int sol[1001];
int minim=INT_MAX;
int nr;
int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>v[i];
    sort(v+1, v+n+1);
    for(i=1;i<=v[n];i++)
        dp[i]=-1;
    for(i=1;i<=n;i++)
        if(dp[v[i]]==-1)  ///nu a fost obtinuta submultimea de suma v[i]
        {
            sol[++nr]=v[i];       ///selctez elementul v[i]
            for(j=0;j<=v[n]-v[i];j++)   ///determin toate submultimile ce pot fi obtinute adaugand v[i] la submultimi determinte anterior
                if(dp[j]!=-1)   ///a fost obtinuta anterior submultimea de suma j
                    dp[j+v[i]]=1;  /// se obtine submutimea de suma v[i]+j
        }
    fout<<nr<<'\n';
    for(i=1;i<=nr;i++)
        fout<<sol[i]<<'\n';
    return 0;
}