Pagini recente » Cod sursa (job #2012774) | Cod sursa (job #2406331) | Cod sursa (job #117547) | Cod sursa (job #1501140) | Cod sursa (job #2244744)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("sant.in");
ofstream g("sant.out");
struct{
int lungime, suma_ceruta;
}categorie[13];
int s, n,nr_categori,dp[55][105],sol[55],anterior[55][105];
void marcare()
{
for (int i=0; i<55; i++)
{
for (int j=0; j<105; j++)
{
dp[i][j]=999999999;
}
}
}
void recursiv(int l, int col, int index)
{
int dif;
if (index==n)
{
sol[index]=dp[l][col];
return;
}
sol[index]=anterior[l][col];
recursiv(l-1,col-categorie[anterior[l][col]].suma_ceruta,index+1);
}
int main() {
f >> s >> n >> nr_categori;
marcare();
for(int i=1; i<=nr_categori; i++)
{
f >> categorie[i].lungime >> categorie[i].suma_ceruta;
dp[1][categorie[i].lungime]=categorie[i].suma_ceruta;
}
for (int i=2; i<=n; i++)
{
for (int j=1; j<=s; j++)
{
int mini=999999999;
for (int q=1; q<=nr_categori; q++)
{
if (j-categorie[q].lungime>0)
{
if (dp[i-1][j-categorie[q].lungime]+categorie[q].suma_ceruta<mini)
{
mini=dp[i-1][j-categorie[q].lungime]+categorie[q].suma_ceruta;
anterior[i][j]=q;
}
}
}
dp[i][j]=mini;
}
}
cout << dp[n][s] <<' ' << anterior[n][s] <<'\n';
recursiv(n,s,1);
for (int i=1; i<=n; i++)
{
for (int j=1; j<=s; j++)
{
if (dp[i][j]==999999999)
dp[i][j]=0;
cout << dp[i][j] <<' ';
}
cout << '\n';
}
return 0;
}