bzoj1569: [JSOI2008]Blue Mary的职员分配

http://www.lydsy.com/JudgeOnline/problem.php?id=1569

 

dp[i][j][a][b] 表示i个职员,发广告状态为j,已有金钱a,声誉b的最少天数

j=0 表示没有发广告,否则j表示距离发广告j天

枚举有t个人增加金钱,那就有i-t个人增加声誉

当j=3时,人数+1

当j=0或j=3时,考虑发不发广告

 

注意:

1、当天赚的钱可以用来发广告

2、新招募的人当天不能为公司带来收益

 

#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

int ans;

int dp[41][4][21][21];
 
int main()
{
    freopen("data.in","r",stdin);
 //   freopen("my.out","w",stdout);
    int n,x,y,z,A,B;
    scanf("%d%d%d%d%d%d",&n,&x,&y,&z,&A,&B);
    int ans=ceil(1.0*A/(n*x))+ceil(1.0*B/(n*y));
    int ta=max(z,A);
    memset(dp,63,sizeof(dp));
    dp[n][0][0][0]=0;
    int ni,na,nb;
    for(int i=n;i<=40;++i)
        for(int j=0;j<=3;++j)
            for(int a=0;a<=ta;++a)
                for(int b=0;b<=B;++b)
                    if(dp[i][j][a][b]<ans)
                    {
                         if(a>=A && b>=B) 
                        {
                            ans=min(ans,dp[i][j][a][b]);
                            continue;
                        }
                        for(int t=0;t<=i;++t)
                        {
                            na=min(ta,a+t*x);
                            nb=min(B,b+(i-t)*y); 
                            ni=i;
                            if(j==3) ni++;
                            if(j==0 || j==3)
                            {
                                dp[ni][0][na][nb]=min(dp[ni][0][na][nb],dp[i][j][a][b]+1);
                                if(na>=z) dp[ni][1][na-z][nb]=min(dp[ni][1][na-z][nb],dp[i][j][a][b]+1);
                            }
                            else dp[ni][j+1][na][nb]=min(dp[ni][j+1][na][nb],dp[i][j][a][b]+1);
                        }
                    }
    printf("%d",ans);
}

 

1569: [JSOI2008]Blue Mary的职员分配

Time Limit: 15 Sec  Memory Limit: 162 MB
Submit: 416  Solved: 178
[Submit][Status][Discuss]

Description

由于Blue Mary呕心沥血的管理,Blue Mary的网络公司蒸蒸日上。现在一共拥有了n名职员,可惜没有任何的金钱和声誉。平均每名每天职员都可以给公司带来x单位金钱或者y单位声誉(名利不能双全)。并且可以花费z单位的金钱在人才交易市场发布广告招聘职员,每次发布广告三天以后就会招聘到一名职员,并且必须在发布广告并且招聘到职员的那一天才能发布下一次广告。 Blue Mary计划以最快的时间获得至少A单位金钱和至少B单位声誉,请你计算一下他至少需要多少时间才能达到他的目标。

Input

输入有且仅有一行,包含六个整数n,x,y,z,A和B,意义如题目描述所述。

Output

要求输出一行,包含一个整数,表示Blue Mary至少需要多少时间才能达到他的目标。

Sample Input

1 2 3 4 5 6

Sample Output

5

HINT

1<=n,x,y,z,A,B<=20

posted @ 2018-01-05 09:31  TRTTG  阅读(312)  评论(0编辑  收藏  举报