Cod sursa(job #273953)

Utilizator ssergiussSergiu-Ioan Ungur ssergiuss Data 9 martie 2009 11:31:14
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<stdio.h>
#define INF -30001
#define DIM 2001
int g,w,eg[DIM],cg[DIM],a[DIM][10*DIM];
int min(int x,int y){
    if(x<y)
        return x;
    return y;}
void solve(){
    int i,j;
    scanf("%d%d",&g,&w);
    for(i=1; i<=g; ++i)
	scanf("%d%d",&eg[i],&cg[i]);
	for(i=1; i<=g; ++i)
		for(j=1; j<=w; ++j)
			a[i][j]=INF;
	for(i=1; i<=eg[1]; a[1][i++]=cg[1]);
	for(i=2; i<=g; a[i][1]=min(a[i-1][1],cg[i]),++i);
	for(i=2; i<=g; ++i)
		for(j=2; j<=w; ++j)
			if(eg[i]<=j){
				if(a[i-1][j]!=INF&&a[i-1][j-eg[i]]!=INF)
					a[i][j]=min(a[i-1][j],cg[i]+a[i-1][j-eg[i]]);
				else if(a[i-1][j-eg[i]]!=-INF)
					a[i][j]=cg[i]+a[i-1][j-eg[i]];}
			else{
				if(a[i-1][j]!=INF)
					a[i][j]=min(a[i-1][j],cg[i]);
				else
					a[i][j]=cg[i];}
	printf("%d",a[g][w]);}
int main(){
    freopen("energii.in","r",stdin);
    freopen("energii.out","w",stdout);
    solve();
    return 0;}