zoukankan      html  css  js  c++  java
  • hdu 1158 Employment Planning (dp)

    题目大意:

    一个公司知道他每一个月须要多少员工。

    又给出每一个员工的工资。

    每次招聘或者解雇一个人的时候都会给出额外的钱。


    思路分析:

    dp [i][j] 表示第i 个月的时候手上有 j 名员工的最优解。

    状态转移要从上一个月的状态转移过来。

    可是要求到的是最大值。


    dp[i] [j] = min(dp[i][j] , dp[i-1][ a[i-1] --- Max ] + 额外费用+ 工资)...

    这道题目的数据范围不是非常清晰。


    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <set>
    #include <vector>
    #define maxn 1005
    using namespace std;
    
    int a[maxn];
    int hire,sala,fire;
    int dp[20][maxn];
    int main()
    {
        int n;
        while(scanf("%d",&n)!=EOF && n)
        {
            int m=0;
            scanf("%d%d%d",&hire,&sala,&fire);
            for(int i=1;i<=n;i++)scanf("%d",&a[i]),m=max(m,a[i]);
    
            memset(dp,0x3f,sizeof dp);
            for(int i=0;i<=m;i++)
                dp[1][i]=hire*i+sala*i;
            for(int i=2;i<=n;i++)
            {
                for(int s=a[i];s<=m;s++)
                {
                    for(int j=a[i-1];j<=m;j++)
                    {
                        if(j<s)dp[i][s]=min(dp[i][s],dp[i-1][j]+(s-j)*hire+sala*s);
                        else if(j==s)dp[i][s]=min(dp[i][s],dp[i-1][j]+sala*s);
                        else dp[i][s]=min(dp[i][s],dp[i-1][j]+(j-s)*fire+sala*s);
                    }
                }
            }
            int ans=0x3f3f3f3f;
            for(int i=a[n];i<=m;i++)
                ans=min(ans,dp[n][i]);
            printf("%d
    ",ans);
        }
        return 0;
    }
    


  • 相关阅读:
    pytorch空间变换网络
    Jittor 的Op, Var算子
    元算子卷积层实现
    Caffe实现概述
    Halide视觉神经网络优化
    旷视MegEngine数据加载与处理
    旷视MegEngine网络搭建
    旷视MegEngine基本概念
    Torchvision模型微调
    新的一天
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/6978072.html
Copyright © 2011-2022 走看看