Pagini recente » Cod sursa (job #1361576) | Cod sursa (job #2772776) | Cod sursa (job #1164862) | Cod sursa (job #1842838) | Cod sursa (job #1056274)
#include<cstdio>
#define MAX_M 30000
#define MAX_N 1001
#define CLOSE fclose(in); fclose(out); return 0;
using namespace std;
int mat[3][MAX_M],C[MAX_N],P[MAX_N];
inline int max (int a, int b){
return a>b?a:b;
}
int main (){
FILE *in=fopen("energii.in","r");
FILE *out=fopen("energii.out","w");
int G,W,sum=0,sum2=0; fscanf(in,"%d%d",&G,&W);
for(int i = 1 ; i <= G; ++i){
fscanf(in,"%d%d",&P[i],&C[i]);
sum+=P[i];
sum2+=C[i];
}
if(sum<W){
fprintf(out,"-1\n");
CLOSE
}
int sol=MAX_M;
for(int i = 1 ; i <= G ; ++i){
for(int j = 1 ; j <= 26000; ++j){
if(i%2==0){
if(j>=C[i])
mat[2][j]=max(mat[1][j],P[i]+mat[1][j-C[i]]);
else
mat[2][j]=mat[1][j];
if(sol>j && mat[2][j]>=W)
sol=j;
}
else{
if(j>=C[i])
mat[1][j]=max(mat[2][j],P[i]+mat[2][j-C[i]]);
else
mat[1][j]=mat[2][j];
if(sol>j && mat[1][j]>=W)
sol=j;
}
}
}
fprintf(out,"%d\n",sol);
CLOSE
}