Cod sursa(job #3356251)

Utilizator YannYann Spataru Yann Data 30 mai 2026 14:13:19
Problema Energii Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>

using namespace std;
	ifstream cin("energii.in");
	ofstream cout("energii.out");
	pair<int, int> v[1002]; /// energie, cost
	pair<int, int> suma[10000001]; /// se-poate-Sau-nu, cost
int main()
{
	int g,w,pozmax;
	cin>>g>>w;
	for(int n2=1;n2<=g;n2++) {
		cin>>v[n2].first>>v[n2].second;
	}
	pozmax=v[1].first;
/*	for(int n2=1;n2<=10000000;n2++) {
		suma[n2].second=10000001;
	}*/
	suma[v[1].first].first=1;
	suma[v[1].first].second=v[1].second;
	for(int n2=2;n2<=g;n2++) {
		for(int n3=pozmax;n3>=0;n3--)
			if(suma[n3].first==1/* && n3+v[n2].first<=w*/) {
				suma[n3+v[n2].first].first=1;
				suma[n3+v[n2].first].second=suma[n3].second+v[n2].second;
			}
		suma[v[n2].first].first=1;
		if(suma[v[n2].first].second==0)
			suma[v[n2].first].second=v[n2].second;
		else if(suma[v[n2].first].second>=v[n2].second)
			suma[v[n2].first].second=v[n2].second;
		pozmax+=v[n2].first;
	}
	int s=suma[w].second;
	for(int n2=w;n2<=pozmax;n2++)
		if(suma[n2].first==1 && suma[n2].second<=s)
			s=suma[n2].second;
	if(s==10000001)
		s=-1;
	/*for(int n2=1;n2<=pozmax;n2++) {
		cout<<suma[n2].first<<" "<<suma[n2].second<<'\n';
	}*/
	cout<<s;
    return 0;
}