Pagini recente » Cod sursa (job #1443861) | Cod sursa (job #1977954) | Cod sursa (job #1117987) | Cod sursa (job #2529343) | Cod sursa (job #1109144)
#include <fstream>
#include <cstring>
#define PII pair<int, int>
#define x first
#define y second
using namespace std;
const int N=105;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int n, l;
PII a[N], b[N];
int dp[N][N], nxt[N][N];
bool verif(int t)
{
int i, j, k;
memset(dp, -1, sizeof(dp));
memset(nxt, 0, sizeof(nxt));
dp[0][0]=0;
for(i=1;i<=n;i++)
{
for(j=0;j<=l;j++)
{
if(dp[i-1][j]==-1) continue;
for(k=0;k<=t/a[i].x&&j+k<=l;k++)
{
if(dp[i][j+k]<dp[i-1][j]+(t-a[i].x*k)/a[i].y)
{
dp[i][j+k]=dp[i-1][j]+(t-a[i].x*k)/a[i].y;
nxt[i][j+k]=k;
}
}
}
}
if(dp[n][l]>=l) return true;
return false;
}
int main()
{
int i, st, dr, mij, sol=0;
fin>>n>>l;
for(i=1;i<=n;i++) fin>>a[i].x>>a[i].y;
for(st=1, dr=100;st<=dr;)
{
mij=(st+dr)/2;
if(verif(mij))
{
dr=mij-1;
sol=mij;
}
else st=mij+1;
}
verif(sol);
for(i=n;i;i--)
{
b[i].x=nxt[i][l];
b[i].y=(sol-b[i].x*a[i].x)/a[i].y;
l-=nxt[i][l];
}
fout<<sol<<"\n";
for(i=1;i<=n;i++) fout<<b[i].x<<" "<<b[i].y<<"\n";
fin.close();
fout.close();
}