Pagini recente » Cod sursa (job #224408) | Cod sursa (job #2367767) | Cod sursa (job #1423227) | Cod sursa (job #1978327) | Cod sursa (job #212169)
Cod sursa(job #212169)
/*
#include <cstdio>
#include <vector>
using namespace std;
const int N=10010;
const int INF=20000000;
int n,w,e[N][2],minn;
vector<int> v(5001,INF);
void read(){
int i;
freopen("energii.in","r",stdin);
scanf("%d%d",&n,&w);
for (i=1;i<=n;++i)
scanf("%d%d",&e[i][0],&e[i][1]);
}
void solve(){
v[0]=0;
for(int i=1;i<=n;++i)
for(int j=w-1;j>=0;--j)
if(v[j]!=INF){
if(j+e[i][0] >= w && v[j]+e[i][1] < v[w])
v[w] = v[j]+e[i][1];
if(j+e[i][0] < w && v[j]+e[i][1] < v[j+e[i][0]])
v[j+e[i][0]] = v[j]+e[i][1];
}
if(v[w]==INF)
minn=-1;
else
minn=v[w];
}
void write(){
freopen("energii.out","w",stdout);
printf("%d\n",minn);
}
int main(){
read();
solve();
write();
}
*/
#include <cstdio>
#define N 1010
int n,w,e[N][2],min;
int v[10011005];
void read(){
int i;
freopen("energii.in","r",stdin);
scanf("%d%d",&n,&w);
for (i=1;i<=n;++i)
scanf("%d%d",&e[i][0],&e[i][1]);
}
void solve(){
long max,i,j;
for (i=1;i<=n;++i){
if (e[i][1]>max)
max=e[i][1];
for (j=1;j<=max;++j)
if (v[j]){
if (v[j+e[i][1]]<e[i][0]+v[j])
v[j+e[i][1]]=e[i][0]+v[j];
if (j+e[i][1]>max)
max=j+e[i][1];
}
v[e[i][1]]=e[i][0];
}
min=-1;
for (i=1;i<=max;++i)
if (v[i]&&v[i]>w)
min=i;
}
void write(){
freopen("energii.out","w",stdout);
printf("%d\n",min);
}
int main(){
read();
solve();
write();
}