Cod sursa(job #14798)

Utilizator gigi_becaliGigi Becali gigi_becali Data 9 februarie 2007 20:35:53
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <cstdio>
#include <algorithm>
#include <string>
using namespace std;
int dp[1024][5120], n, a[1024], b[1024], S;

void citire()
{
	freopen("energii.in", "r",stdin);
	scanf("%d\n", &n);
	scanf("%d\n", &S);
	for(int i=1;i<=n;i++) scanf("%d %d\n", &a[i], &b[i]);
}

void dynamic()
{
	int i, j;
	//memset(dp, 0x3f3f3f3f, sizeof(dp));
	for(i=1;i<=n;i++)
	{
		dp[1][a[i]]=0x3f3f3f3f;
		dp[1][a[i]]=min(dp[1][a[i]], b[i]);
	}
	
	//for(i=1;i<=10;i++) printf("%d ", dp[1][i]);
//printf("\n");	
for(i=0;i<=n;i++)
	for(j=0;j<=S;j++) if(dp[i][j]==0) dp[i][j]=0x3f3f3f3f;
	

	for(i=2;i<=n;i++)
		for(j=0;j<=S;j++)	
	{
			
		
			dp[i][j]=dp[i-1][j];
			if(j-a[i]>=0) dp[i][j]=min(dp[i][j], dp[i-1][j-a[i]]+b[i]);
		
		}
	freopen("energii.out", "w", stdout);
/*
	for(i=1;i<=n;i++)
	{
		for(j=0;j<=S;j++)printf("%d ", dp[i][j]);
		printf("\n");
	}
	*/
		printf("%d\n", dp[n][S]);
}

int main()
{
	citire();
	dynamic();
	return 0;
}