Pagini recente » Cod sursa (job #2504330) | Cod sursa (job #2643830) | Rating mama mama (mamamama) | Monitorul de evaluare | Cod sursa (job #3141655)
//https://infoarena.ro/problema/rucsac
#include <bits/stdc++.h>
using namespace std;
int n,k;
// D[i][j] costul minim pentru a strange minim j energii cu primele i generatoare
// k = generatoare
// n = energii
int main(){
ifstream cin("energii.in");
ofstream cout("energii.out");
cin >> k >> n;
int G[n+10], C[n+10], D[k+10][n+10];
for(int i=1; i<=k; i++){
cin >> G[i] >> C[i];
}
for(int i=0; i<=k; i++){
D[i][0] = 0;
}
for(int i=0; i<=k; i++){
for(int j = 1; j<=n+1;j++){
D[i][j] = 1e9;
}
}
for(int i=1; i<=k; i++){
for(int j=n; j>=1; j--){
if(j - G[i] >= 0){
D[i][j] = min({D[i-1][j - G[i]] + C[i], D[i-1][j], D[i][j+1]});
} else {
D[i][j] = min(D[i-1][j], D[i][j+1]);
}
}
}
// for(int i=1; i<=k; i++)
// for(int j = 1; j<=n;j++)
// cout << D[i][j] << "\n "[j < n];
if(D[k][n] != 1000000000){
cout << D[k][n];
} else {
cout << "-1";
}
}