Cod sursa(job #2546372)

Utilizator Hey_HeyIacovlev Denis Hey_Hey Data 14 februarie 2020 09:29:23
Problema Energii Scor 95
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.82 kb
#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=0; 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";
}