Cod sursa(job #3206464)

Utilizator Cezar2009Cezar Mihai Titihazan Cezar2009 Data 22 februarie 2024 21:39:05
Problema Secventa 3 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
//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;
}