Cod sursa(job #2816401)

Utilizator rareshinnhoMiroiu Rares rareshinnho Data 11 decembrie 2021 12:51:56
Problema Componente tare conexe Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("scara3.in");
ofstream g("scara3.out");
int apa[1202],nrg[1202],dp[1202],cost[1202];
int main()
{
    int i,n,k,a,b,l;
    f>>n;
    f>>k;
    for(i=1;i<=k;i++)
        {
            f>>a>>b;
            apa[a]=b;
        }
    f>>l;
     for(i=1;i<=l;i++)
        {
            f>>a>>b;
            nrg[a]=b;
        }
    for(i=2;i<=n;i++)
        cost[i]=dp[i]=INT_MAX;
    dp[1]=1;
    for(i=1; i<n; i++)
    {
        if(!dp[i+1]|| dp[i+1]>dp[i]+1||(cost[i+1]>cost[i]&&dp[i+1]==dp[i]+1))
        {
            dp[i+1]=dp[i]+1;
            cost[i+1]=cost[i];
        }

        if(apa[i])
            for(int j=2; j<=apa[i]&&i+j<=n; j++)
                if(!dp[i+j]|| dp[i+j]>dp[i]+1||(cost[i+j]>cost[i]&&dp[i+j]==dp[i]+1))
                {
                    dp[i+j]=dp[i]+1;
                    cost[i+j]=cost[i];
                }
        if(nrg[i])
            for(int j=2; j<=2*nrg[i]&&i+j<=n; j++)
                if(!dp[i+j]|| dp[i+j]>dp[i]+1||(cost[i+j]>cost[i]+(j+1)/2 && dp[i+j]==dp[i]+1))
                    {
                    dp[i+j]=dp[i]+1;
                    cost[i+j]=cost[i]+(j+1)/2;
                    }
    }
    g<<dp[n]<<' '<<cost[n];
    return 0;
}