Pagini recente » Cod sursa (job #2405401) | Cod sursa (job #2703547) | Cod sursa (job #535930) | Cod sursa (job #2106034) | Cod sursa (job #735115)
Cod sursa(job #735115)
#include <iostream>
#include <fstream>
#define N 550
using namespace std;
ifstream in("calatorie.in");
ofstream out("calatorie.out");
bool folosit[55][555];
long long a[55][555];
void adauga(int nr,int x,int y)
{
int i;
for(i=0;i<=N;++i)
{
if(folosit[nr-1][i]==false)
continue;
if(folosit[nr][i+y])
{
if(a[nr][i+y]>a[nr-1][i])
a[nr][i+y]=a[nr-1][i];
}
else
{
folosit[nr][i+y]=true;
a[nr][i+y]=a[nr-1][i];
}
if(folosit[nr][i])
{
if(a[nr][i]>a[nr-1][i]+x)
a[nr][i]=a[nr-1][i]+x;
}
else
{
a[nr][i]=a[nr-1][i]+x;
folosit[nr][i]=true;
}
}
/* for(i=0;i<=N;++i)
{
if (folosit[nr][i])
out<<i<<"("<<a[nr][i]<<") ";
}
out<<"\n";*/
}
void solve()
{
int n,j,x,y;
long long p,minim=77700000000LL,i;
in>>n;
n--;
if(n==0)
{
out<<"Consumul minim = "<<0<<".\n";
return;
}
folosit[0][0]=true;
for(i=1;i<=n;++i)
{
in>>x>>y;
adauga(i,x,y);
}
for(i=0;i<=N;++i)
{
if(!folosit[n][i])
continue;
p=a[n][i]+i*i*i*i;
if (p<minim)
minim=p;
}
out<<"Consumul minim = "<<minim<<".\n";
for(i=1;i<=n;++i)
for(j=0;j<=N;++j)
{
folosit[i][j]=false;
a[i][j]=0;
}
}
int main()
{
int i,t;
in>>t;
for(i=1;i<=t;++i)
{
solve();
}
return 0;
}