Pagini recente » Cod sursa (job #1506803) | Cod sursa (job #2119632) | Cod sursa (job #1713) | Cod sursa (job #2875561) | Cod sursa (job #2208018)
#include <fstream>
#define MIN -1000000000
using namespace std;
int n,L,a[105],b[105],dp[105][105];
pair <int, int> sol[105];
bool verif(int t)
{
for(int i=0;i<=n;i++)
for(int j=1;j<=L;j++)
dp[i][j]=MIN;
for(int i=1;i<=n;i++)
for(int j=0;j<=L;j++)
for(int laptea=0;laptea<=t/a[i] and laptea<=j;laptea++)
{
int lapteb=(t-a[i]*laptea)/b[i];
dp[i][j]=max(dp[i][j],dp[i-1][j-laptea]+lapteb);
}
return (dp[n][L]>=L);
}
int main()
{
ifstream f("lapte.in");
ofstream g("lapte.out");
f>>n>>L;
for(int i=1;i<=n;i++)
f>>a[i]>>b[i];
int timp;
for(int t=1;t<=100;t++)
if(verif(t))
{
timp=t;
break;
}
g<<timp<<"\n";
verif(timp);
for(int i=n;i>=1;i--)
for(int laptea=0;laptea<=timp/a[i];laptea++)
{
int lapteb=(timp-a[i]*laptea)/b[i];
if(dp[i][L]==dp[i-1][L-laptea]+lapteb)
{
sol[i].first=laptea;
sol[i].second=lapteb;
L-=laptea;
break;
}
}
for(int i=1;i<=n;i++)
g<<sol[i].first<<" "<<sol[i].second<<"\n";
return 0;
}