Pagini recente » Cod sursa (job #2739931) | Cod sursa (job #1079881) | Cod sursa (job #577037) | Cod sursa (job #2604406) | Cod sursa (job #596536)
Cod sursa(job #596536)
#include <fstream.h>
#define MAX 2000000000
int g, w, eg[1001], cg[1001], cmin[5001], emin[5001];
bool uz[5001][1001];
void citire();
void calcul();
main(){
freopen("energii.in", "r", stdin);
freopen("energii.out", "w", stdout);
citire();
calcul();
if(cmin[w])
printf("%d", cmin[w]);
else
printf("-1");
}
void citire(){
int i;
scanf("%d%d", &g, &w);
for(i=1;i<=g;i++)
scanf("%d%d", &eg[i], &cg[i]);}
void calcul(){
int mine,jj;
long minc;
for(int i=1;i<=w;i++){
minc=MAX;
for(int j=1;j<=g;j++){
if(i-eg[j]>0){
if(eg[j]>=i-emin[i-eg[j]]&&uz[i-eg[j]][j]==0&&minc>cmin[i-eg[j]]+cg[j]){
minc=cmin[i-eg[j]]+cg[j];
mine=emin[i-eg[j]]+eg[j];
jj=j;}}
else{
if(eg[j]>=i&&minc>cg[j]){
minc=cg[j];
mine=eg[j];
jj=j;}}}
if(minc!=MAX){
cmin[i]=minc;
emin[i]=mine;
if(i-eg[jj]>0){
for(int k=1;k<=g;k++){
if(uz[i-eg[jj]][k])
uz[i][k]=1;}}
uz[i][jj]=1;}}}