Cod sursa(job #3244360)

Utilizator RosheRadutu Robert Roshe Data 24 septembrie 2024 16:36:48
Problema Ghiozdan Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("ghiozdan.in");
ofstream out("ghiozdan.out");

int W[20001];
int dp[20001][75001];

int main(){
  int N, Gmax;
  in >> N >> Gmax;
  for(int i = 1; i<=N; i++){
    in >> W[i];
  }
  for(int i = 1; i<=N; i++){
    for(int wg = 0; wg<=Gmax; wg++){
      dp[i][wg] = dp[i-1][wg];
      if(W[i] <= wg)
        dp[i][wg] = min(dp[i-1][wg], dp[i-1][wg-W[i]]) + 1;
    }
  }
  /*
  for(int i = 0; i<=Gmax; i++)
    cout << dp[N][i];
  */
  int p = Gmax;
  int l = N;
  while(dp[N][p] == dp[N][p-1]) p--;
  out << p << " " << dp[N][p] << "\n";
  while(l){
    if(dp[l][p] != dp[l-1][p]){
      out << W[l] << "\n";
      p-=W[l];
    }  
    l--;  
  }
}