Witam, mam następujący problem:
Rozwiązałem to zadanko, a przynajmniej tak mi się wydawało, niestety dostałem jedynie 8 pkt, czy mógłby mnie ktoś naprowadzić dlaczego coś jest źle?
// Programowanie Dynamiczne
#include <iostream>
#define MAX 100000000
using namespace std;
int Namioty[101][201];
int Zolta[101][201];
int Zgloszenia[101][2];
int Maximum(int a, int b)
{
if(a>=b) return a;
else return b;
}
int Minimum(int a,int b)
{
if(a<=b) return a;
else return b;
}
int main()
{
for(int i = 0; i < 101; i++)
for(int j = 0; j < 201; j++)
Namioty[i][j] = Zolta[i][j] = 0;
int Ile_zg,MaxZiel,MaxZol;
cin >> Ile_zg >> MaxZiel >> MaxZol;
int zol,ziel;
for(int i = 1; i <= Ile_zg; i++)
{
cin >> ziel >> zol;
Zgloszenia[i][0] = ziel;
Zgloszenia[i][1] = zol;
}
for(int i = 1; i <= Ile_zg; i++)
for(int j = 1; j <= MaxZiel; j++)
{
if(Zgloszenia[i][0] <= j)
{
Namioty[i][j] = Maximum(Namioty[i-1][j],Namioty[i-1][j-Zgloszenia[i][0]]+1);
}
else
{
Namioty[i][j] = Namioty[i-1][j];
}
}
for(int i = 1; i <= Ile_zg; i++)
for(int j = 1; j <= MaxZiel; j++)
{
if(Namioty[i][j] > Namioty[i-1][j])
{
Zolta[i][j] = Zolta[i-1][j-Zgloszenia[i][0]]+Zgloszenia[i][1];
}
else
{
Zolta[i][j] = Minimum(Zolta[i-1][j],Zolta[i-1][j-Zgloszenia[i][0]]+Zgloszenia[i][1]);
}
}
for(int i = 1; i <= Ile_zg; i++)
for(int j = 1; j <= MaxZiel; j++)
{
if(Zolta[i][j] > MaxZol) Namioty[i][j] = 0;
}
int Max = 0;
for(int i = 1; i <= Ile_zg;i++)
for(int j = 1; j <= MaxZiel; j++)
if(Namioty[i][j] > Max ) Max = Namioty[i][j];
cout << Max << endl;
}
-- Śr gru 26, 2012 11:16 pm --
Naprawdę nikt nie ma pomysłu ? 