Pagini recente » Cod sursa (job #3237667) | Cod sursa (job #1098725) | Cod sursa (job #1284242) | Cod sursa (job #2972364) | Cod sursa (job #3206464)
//https://www.infoarena.ro/problema/morcovi
#include <bits/stdc++.h>
using namespace std;
ifstream fin("morcovi.in");
ofstream fout("morcovi.out");
int d[5000][1010],v[1010],pas[15];
int main()
{
int n,p,i,j,k;
fin>>n;
for(i=1;i<=n;i++)
{
fin>>v[i];
}
fin>>p;
for(i=1;i<=p;i++)
{
fin>>pas[i];
}
for(i=1;i<=n;i++)
{
d[0][i]=v[i];
}
for(i=1;i<(1<<p);i++)
{
for(j=1;j<=n;j++)
{
for(k=0;k<p;k++)
{
int masca=i^(1<<k);
if(((i>>k)&1)==1)
{
if(j-pas[k+1]>=1)
{
d[i][j]=max(d[i][j],d[masca][j-pas[k+1]]+v[j]);
}
if(j+pas[k+1]<=n)
{
d[i][j]=max(d[j][i],d[masca][j+v[k+1]]+v[j]);
}
}
}
}
}
int maxi=0;
for(i=1;i<=n;i++)
{
//cout<<d[1<<p-1][i]<<" ";
maxi=max(maxi,d[(1<<p)-1][i]);
}
fout<<maxi;
return 0;
}