Pagini recente » Cod sursa (job #1394592) | Cod sursa (job #2095753) | Cod sursa (job #966933) | Cod sursa (job #948053) | Cod sursa (job #2859627)
#include <bits/stdc++.h>
using namespace std;
ifstream r ("lapte.in");
ofstream w ("lapte.out");
struct str
{
int x, y;
} v[105], s[105];
int dp[105][105], rec[105][105];
int main()
{
int n, t, l;
r>>n>>l;
for(int i=1; i<=n; i++)
{
r>>v[i].x>>v[i].y;
}
int step=64, pos=0;
while(step>0)
{
t=step+pos;
for(int i=0;i<=n;i++){
for(int j=0;j<=l;j++){
dp[i][j]=-0x3f3f3f3f;
}
}
dp[0][0]=0;
for(int i=1;i<=n;i++){
for(int j=0;j<=l;j++){
for(int h=0;h*v[i].x<=t && h<=j;h++){
dp[i][j]=max(dp[i][j],dp[i-1][j-h]+(t-v[i].x*h)/v[i].y);
}
}
}
if(dp[n][l]<l)
{
pos+=step;
}
step/=2;
}
w<<pos;
for(int i=0;i<=n;i++)
{
for(int j=0;j<=l;j++)
{
dp[i][j]=-0x3f3f3f3f;
}
}
dp[0][0]=0;
for(int i=1;i<=n;i++)
{
for(int j=0;j<=l;j++)
{
for(int h=0;h*v[i].x<=t&&h<=j;h++)
{
if(dp[i][j]<dp[i-1][j-h]+(t-v[i].x*h)/v[i].y)
{
rec[i][j]=j-h;
dp[i][j]=max(dp[i][j],dp[i-1][j-h]+(t-v[i].x*h)/v[i].y);
}
}
}
}
for(int i=n;i>0;i--)
{
s[i].x=l-rec[i][l];
s[i].y=(pos-s[i].x*v[i].x)/v[i].y;
l=rec[i][l];
}
for(int i=1;i<=n;i++){
w<<"\n"<<s[i].x<<" "<<s[i].y;
}
return 0;
}