Pagini recente » Istoria paginii runda/1645850989007291/clasament | Autentificare | Cod sursa (job #2723731) | Istoria paginii runda/penultimainaintedeotv/clasament | Cod sursa (job #1914713)
#include <stdio.h>
using namespace std;
FILE* f;
FILE* g;
int s=0,st=0,n,w,mini;
struct generator{
int power;
int cost;
}a[5002];
int b[200202005];
void read(){
fscanf(f,"%d %d",&n,&w);
for(int i=1;i<=n;i++){
fscanf(f,"%d%d",&a[i].power,&a[i].cost);
s+=a[i].cost;
st+=a[i].power;
}
}
void solve(){
mini=s+1;
for(int i=1;i<=n;i++)
for(int j=s-a[i].cost;j>=0;j--){
if(b[j+a[i].cost]<b[j]+a[i].power){
b[j+a[i].cost]=b[j]+a[i].power;
if(j+a[i].cost<mini && b[j+a[i].cost]>=w)
mini=j+a[i].cost;
if(b[j+a[i].cost]<w && b[j+a[i].cost-1]>=w) break;
}
}
fprintf(g,"%d",mini);
}
int main()
{
f=fopen("energii.in","r");
g=fopen("energii.out","w");
read();
if(st<w) fprintf(g,"-1");
else
solve();
return 0;
}