チケット

レッドクリフ(下)は、最終的には寧波にリリースされ、ボックスオフィスは本当にああ活気づいていること、そしてそれは、チケットを取得することは困難です。暁明は興奮して「XXシネマ」を走ったドア(広告容疑者を避けるために、劇場の演劇のモザイクの名前は、広告、価格の譲歩をリースできるようになりました、劇場を尋ねるために歓迎)。すでに見つかっファンがチケットのためにキューに入れNがあり、人はものを買って、切符売り場の規定は、人が2枚のだけのチケットの最大を購入することができます。私は最初の桁ファンが時間Ti(1≤i≤n)を取り、チケットを購入することを前提とし、隣接する二つのファンのチーム(J-J + 1個人と個人)人はチケット2枚を購入する場所も行うことができ、他には、RJなりRjの<Tjの+ Tjの+ 1ならば、そうすることが、チケットの全体のプロセスをスピードアップするために、ファンの後ろに待機時間を短縮することができ、時間に2枚のチケットを買うために並ぶ、および2人のファンではないことができながら、 。

あまりにも多くの人々。暁明は、胸焼けは、ああ、本当に暁明人の前でと一緒にチケットを購入することを好きではない、とだけn個の個人の後暁明チケットを回すためにチケットを購入することを、この個人nは後ろで来ました。ニックネームは、TjのとRJ、暁明は、あなたは彼がチケットを購入するために変えることができますどのくらいの最速の計算を支援するために、今のnを与え、早期のチケットを購入することをお勧めしますか?

入力

有多组数据,每组包含3行:第一行一个整数n(1<=n<=5000);第二行n个整数,表示Ti(1≤i≤n,0<=Ti<=65535)
相邻两个数之间有一个空格隔开;第三行n-1个整数,表示Ri(1≤i≤n-1,0<=Ri<=65535)相邻两个数之间有一个空格隔开。

出力

每组输入对应一组输出,每一组输出只有一行一个整数k,表示n个人买完票最快需要多少时间。

サンプル入力

3
1 2 3
1 1
4
1 2 3 4
2 3 10

サンプル出力

2
8
#include<bits/stdc++.h>
using namespace std;
int i,i0,n,m,T,a[5005],r[5005];
long long dp[5005];
int main()
{
    while(scanf("%d",&n)!=EOF)
    {
        for(i=1;i<=n;i++)scanf("%d",&a[i]),dp[i]=(long long)n*INT_MAX;
        for(i=1;i<n;i++)scanf("%d",&r[i]);
        for(i=1;i<=n;i++)
        {
            dp[i]=min(dp[i],dp[i-1]+a[i]);
            if(i>1)dp[i]=min(dp[i],dp[i-2]+r[i-1]);
        }
        printf("%lld\n",dp[n]);
    }
    return 0;
}

おすすめ

転載: blog.csdn.net/weixin_44061561/article/details/94555355