Pagini recente » Cod sursa (job #2064348) | Cod sursa (job #170063) | Cod sursa (job #906883) | Cod sursa (job #1772721) | Cod sursa (job #3288628)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int n, l;
vector <vector <int>> dp;
vector <vector <int>> reza(105,vector<int>(105));
vector <pair <int,int>> c(105);
bool ok(int mij){
dp.assign(n+1,vector <int>(l+1,-1));
dp[0][0]=0;
for(int i=1;i<=n;i++)
for(int j=0;j<=l;j++)
for(int k=0;k<=j&&k*c[i].first<=mij;k++)
if(dp[i-1][j-k]>=0){
int nd=dp[i-1][j-k]+(mij-k*c[i].first)/c[i].second;
if(nd>dp[i][j]){
dp[i][j]=nd;
reza[i][j]=k;
}
}
return dp[n][l]>=l;
}
int main(){
ios::sync_with_stdio(0);
fin.tie(nullptr);
fin>>n>>l;
for(int i=1;i<=n;i++)
fin>>c[i].first>>c[i].second;
int st=1, dr=1000005, mij;
while(st<=dr){
mij=(st+dr)/2;
if(ok(mij))
dr=mij-1;
else
st=mij+1;
}
int t=dr+1;
ok(t);
vector <int> rezv(n+1);
for(int i=n, s=l;i>0;i--){
rezv[i]=reza[i][s];
s-=rezv[i];
}
fout<<t<<endl;
for(int i=1;i<=n;i++){
fout<<rezv[i]<<' '<<(t-rezv[i]*c[i].first)/c[i].second<<endl;
}
return 0;
}