Cod sursa(job #1059831)

Utilizator buzu.tudor67Tudor Buzu buzu.tudor67 Data 17 decembrie 2013 00:11:25
Problema Energii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<fstream>
#define inf (1<<30)
#define maxn 1003
#define maxg 10003
using namespace std;
ifstream fi("energii.in");
ofstream fo("energii.out");

int i,j,n,w,eg[maxn],ep[maxn];
int a[3][maxg],s=0,m;

inline int min(int a,int b){
       if(a<b) return a; else return b;
}

int main(){
    fi>>n>>w; m=w;
    
    for(i=1;i<=n;i++){
                      fi>>eg[i]>>ep[i];
                      s+=eg[i];
                      if(eg[i]>m) m=eg[i];
                     }
    
    for(i=1;i<=2;i++)
      for(j=1;j<=m;j++) a[i][j]=inf;
    
    a[1][0]=0; a[2][0]=0;
    
    for(i=1;i<=n;i++){
      for(j=1;j<=m;j++)
         if(j>=eg[i]) a[2][j]=min(a[2][j],ep[i]+a[1][j-eg[i]]);
         else a[2][j]=min(a[1][j],ep[j]);
      for(j=0;j<=w;j++)a[1][j]=a[2][j];
      }
    
    if(s>=w) fo<<a[2][m];
    else fo<<"-1";
    
    fi.close();
    fo.close();
    return 0;
}