Pagini recente » Cod sursa (job #401457) | Cod sursa (job #600254) | Cod sursa (job #2291977) | Cod sursa (job #1624309) | Cod sursa (job #2546362)
#include <bits/stdc++.h>
using namespace std;
ifstream fi("energii.in");
ofstream fo("energii.out");
int dp[2][10002], n, W, lc=1, lp=0, i, j, s;
struct
{
int e,c;
}V[5002];
int main()
{
fi >> n >> W;
for(i=1; i<=n; i++) fi >> V[i].e >> V[i].c, s+=V[i].e;
if(s<W) {cout << "-1"; return 0;}
for(i=1; i<=W; i++) dp[0][i]=2e9, dp[1][i]=2e9;
lc=1; lp=0;
for(i=1; i<=n; i++, lc^=1, lp^=1)
{
for(j=1; j<=W; j++)
{
if(V[i].e<j) dp[lc][j]=min(dp[lp][j],dp[lp][j-V[i].e]+V[i].c);
else dp[lc][j]=min(dp[lp][j],V[i].c);
/*for(int a=0; a<=1; a++)
{
for(int b=1; b<=W; b++)
fo << setw(11) << dp[a][b];
fo << '\n';
}
fo << '\n';*/
}
}
if(dp[lp][W]<dp[lc][W])s=dp[lp][W]; else s=dp[lc][W]
if(s!=2e9) fo<<s;
else fo << "-1";
}