I TLE CSP
查看原帖
I TLE CSP
536337
eb0ycn楼主2023/10/15 19:24

纯暴力,60分……

用橙的方法做绿题……

#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll n,m,a[500001],b[500001],c[500001],q,p[500001],dp[500001][2],io;
inline ll min(ll a,ll b)
{
    return a>b?b:a;
}
int main()
{
    scanf("%lld",&n);
    for(ll i=1;i<=n;++i)
    {
        scanf("%lld",a+i);
    }
    for(ll i=1;i<=n;++i)
    {
        scanf("%lld",b+i);
    }
    for(ll i=1;i<=n;++i)
    {
        scanf("%lld",c+i);
    }
    scanf("%lld",&q);
    while(q--)
    {
        scanf("%lld",&m);
        memset(p,0,sizeof(p));//1:目标是1 0:目标是0
        memset(dp,0,sizeof(dp));
        while(m--)
        {
            scanf("%lld",&io);
            p[io]=1;
        }
        dp[n][0]=p[n]?0:b[n];//因为后面会影响前面,所以从后往前动态规划
        dp[n][1]=p[n]?a[n]+c[n]:a[n];//dp[i][0]表示第i个及以后未进行a操作,dp[i][1]表示进行了a操作
        for(ll i=n-1;i;--i)
        {
            dp[i][0]=p[i]?dp[i+1][0]:dp[i+1][0]+b[i];
            dp[i][1]=min(dp[i+1][0]+a[i]+p[i]*c[i],dp[i+1][1]+p[i]*c[i]);
        }
        printf("%d\n",min(dp[1][0],dp[1][1]));//看第一个元素是否要进行a操作
    }
    return 0;
}

开心地TLE了。

2023/10/15 19:24
加载中...