Mai intai trebuie sa te autentifici.
Cod sursa(job #996712)
Utilizator | Data | 12 septembrie 2013 15:39:44 | |
---|---|---|---|
Problema | Energii | Scor | 35 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.47 kb |
#include <iostream>
#include <fstream>
#include <cstring>
#include <string>
#include <climits>
#include <algorithm>
#include <cmath>
using namespace std;
ifstream fin ("energii.in" );
ofstream fout("energii.out");
#define baza 1
#define MAX 2000004
#define MOD 9973
typedef long long int lli;
int n,t,s,i,g, b[5002], j, d[1002], v[1002], sd[1002];
int main()
{
int a[5002]={-1};
fin>>n;
fin>>g;
for(i=1;i<=n;i++)
{
fin>>d[i]>>v[i];
sd[i]=sd[i-1]+d[i];
}
for(i=1;i<=g;i++)
{
a[i]=-1;
}
cout<<"\n";
for(i=1;i<=n;i++)
{
for(j=0;j<=g;j++)
{
if(j>sd[i])
{
b[j]=-1;
}
else if(a[j]==-1)
{
if(d[i]<j)
{
b[j]=v[i]+a[j-d[i]];
}
else
{
b[j]=v[i];
}
}
else
{
if(d[i]<j)
{
b[j]=min(v[i]+a[j-d[i]], a[j]);
}
else
{
b[j]=min(v[i], a[j]);
}
}
}
for(j=0;j<=g;j++)
{
a[j]=b[j];
cout<<a[j]<<" ";
}
cout<<"\n";
}
if(a[g])
fout<<a[g];
else
fout<<-1;
return 0;
}