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