Cod sursa(job #2123994)
| Utilizator | Data | 6 februarie 2018 19:39:26 | |
|---|---|---|---|
| Problema | Energii | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 1.08 kb |
#include <cstdio>
#include <cstring>
using namespace std;
int d[5001];
int min(int a,int b)
{
int min1;
min1=a;
if(min1>b)
min1=b;
return min1;
}
int main()
{
freopen("energii.in","r",stdin);
freopen("energii.out","w",stdout);
int g,w,last,i,j,min1,x,y;
scanf("%d",&g);
scanf("%d",&w);
for(i=1;i<=w;i++)
d[i]=-1;
last=0;
min1=-1;
for(i=1;i<=g;i++)
{
scanf("%d%d",&x,&y);
for(j=last;j>=0;j--)
if(d[j]!=-1)
{
if(j+x<w)
{
if(d[j+x]==-1)
d[j+x]=d[j]+y;
else
d[j+x]=min(d[j]+y,d[j+x]);
}
else
{
if(min1==-1)
min1=d[j]+y;
else
if(min1>d[j]+y)
min1=d[j]+y;
}
}
last=min(w,last+x);
}
printf("%d",min1);
return 0;
}
