Nu aveti permisiuni pentru a descarca fisierul grader_test48.in
Cod sursa(job #1097584)
Utilizator | Data | 3 februarie 2014 17:01:45 | |
---|---|---|---|
Problema | Energii | Scor | 10 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.43 kb |
#include <fstream>
#include <cstdio>
#include <algorithm>
using namespace std;
ifstream in("energii.in");
ofstream out("energii.out");
struct g{ int e; int c;} gs[1001];
int W,n;
bool compare(g g1, g g2)
{
if(g1.c==g2.c)
return g1.e>g2.e;
return g1.c<g2.c;
}
int main()
{
int i,s=0,cm,q=0;
in>>n>>W;
for(i=1;i<=n;i++)
{
in>>gs[i].e>>gs[i].c;
s+=gs[i].e;
q+=gs[i].c;
}
if(s<W)
{
out<<"-1";
return 0;
}
if(s==W)
{
out<<q;
return 0;
}
// sort(gs+1,gs+n,compare);
int found=0;
for(i=1;i<=n;i++)
{
s=0;
int sc=0;
if(gs[i].e>=W)
{
if(found==0)
{
cm=gs[i].c;
found++;
}
if(gs[i].c<cm)
{
cm=gs[i].c;
}
}
else
{
int j=i;
while(s<W&&++j<=n)
{
s+=gs[j].e;
sc+=gs[j].c;
}
if(s>=W)
{
if(found==0)
{
cm=sc;
found++;
}
if(sc<cm)
{
cm=sc;
}
}
}
}
out<<cm;
return 0;
}