Cod sursa(job #2361963)
| Utilizator | Data | 2 martie 2019 20:49:32 | |
|---|---|---|---|
| Problema | Energii | Scor | 40 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 0.65 kb |
#include <bits/stdc++.h>
#define f first
#define s second
using namespace std;
ifstream in("energii.in");
ofstream out("energii.out");
pair<int,int> a[1001];
int dp[1001][5001];
int main(){
int n,w,i,j,sum=0,sum2=0;
in>>n>>w;
for(i=1; i<=n; ++i){
in>>a[i].f>>a[i].s;
sum+=a[i].f;
sum2+=a[i].s;
}
if(sum<w){
out<<-1;
return 0;
}
for(i=1; i<=n; ++i){
for(j=sum; j>=w; --j){
dp[i][j]=dp[i-1][j];
if(sum-j>=a[i].f)
dp[i][j]=max(dp[i][j], dp[i-1][j+a[i].f]+a[i].s);
}
}
out<<sum2-dp[n][w];
return 0;
}
