Pagini recente » Cod sursa (job #2714314) | Cod sursa (job #2046261) | Cod sursa (job #1149969) | Cod sursa (job #113821) | Cod sursa (job #4340)
Cod sursa(job #4340)
#include<fstream.h>
int ct[100000]={0},g[20000],c[20000],ok,i,j,n,w,min,max,maxt;
int main()
{
ifstream f("energii.in");
ofstream fout("energii.out");
f>>n;
f>>w;
maxt=0;
for(i=1;i<=10001;i++)
ct[i]=-1;
for(i=1;i<=n;i++)
{f>>g[i]; f>>c[i];}
maxt=0;
max=0;
for(i=1;i<=n;i++)
{for(j=max;j>=0;j--)
if((j==0||ct[j]!=-1)&&ct[j+g[i]]==-1)
{
ct[j+g[i]]=ct[j]+c[i]+1;
if(j+g[i]>max) max=j+g[i];}
else
if(ct[j]!=-1&&ct[j+g[i]]<ct[j]+c[i])
{ct[j+g[i]]=ct[j]+c[i];
if(j+g[i]>max) max=j+g[i];}
else
if(j==0&&ct[j+g[i]]<ct[j]+c[i])
{ ct[j+g[i]]=ct[j]+c[i];
if(j+g[i]>max) max=j+g[i];}
if(max>=w) {if(maxt<max) maxt=max;
max=w;}
}
min=32000;
if(maxt==0) {fout<<"-1"; return 0;}
if(maxt==w) {fout<<ct[w]; return 0;}
for(i=w;i<=maxt;i++)
if(min>ct[i]&&ct[i]!=0) min=ct[i];
fout<<min;
f.close();
fout.close();
return 0;
}