Pagini recente » Cod sursa (job #2534979) | Profil ΩMΣGΔ | Statistici brestin iustin (iustinb1234) | Cod sursa (job #1850149) | Cod sursa (job #596532)
Cod sursa(job #596532)
#include <fstream.h>
#define MAX 2000000000
int g, w, eg[1001], cg[1001], cmin[5001], emin[5001],min=10001;
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]);
if(eg[i]<min)
min=eg[i];}}
void calcul(){
int mine,jj,j,k;
long minc;
for(int i=1;i<=w;i+=min){
minc=MAX;
for(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(k=1;k<=g;k++){
if(uz[i-eg[jj]][k])
uz[i][k]=1;}}
uz[i][jj]=1;}
for(j=i+1;j<=i+min-1;j++){
cmin[j]=cmin[i];
emin[j]=emin[i];
for(k=1;k<=g;k++)
uz[j][k]=uz[i][k];}}}