Pagini recente » Cod sursa (job #3123338) | Cod sursa (job #1127788) | Cod sursa (job #867110) | Rating maciuca sorina (sorina_96) | Cod sursa (job #1226076)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define inf 2000000000
FILE *f=fopen ("energii.in","r");
FILE *g=fopen ("energii.out","w");
struct date{
int energy,cost;
}v[1005];
int D[2][20005]; //costul minim pentru a obtine j energie folosing surse din primele i
int main(){
int n,S,s=0,sol=inf;
fscanf (f,"%d%d",&n,&S);
for (int i=1;i<=n;++i){
fscanf (f,"%d%d",&v[i].energy,&v[i].cost);
s+=v[i].energy;
}
if (s<S){
fprintf (g,"%d",-1);
return 0;
}
memset (D,999999,sizeof(D));
int l=0;
for (int i=1;i<=n;++i,l=1-l){
D[1-l][0]=0;
for (int j=1;j<=2*S;++j){
D[l][j]=D[1-l][j];
if (j>=v[i].energy){
D[l][j]=min(D[l][j],D[1-l][j-v[i].energy]+v[i].cost);
if (j>=S && sol>D[l][j]) sol=D[l][j];
}
}
}
fprintf (g,"%d",sol);
return 0;
}