`

hdu 1158 Employment Planning (动态规划)

阅读更多

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1158

 

 解题报告:自我感觉这道题目的状态方程不太容易。

刚开始用一维的搞,这么也得不到正确答案,后来想有月份、人数,应该用二维的。 

首先雇主要在第n月花钱最少,一定是在第n-1月花钱也是最少,一定具有最有子结构,可以想到动态规划;

如果第n个月的需要的人数比第n-1个月的多,则需要本月需要(need[n]-need[n-1])*hire+need[n]*salary的钱

如果第n个月的需要的人数比第n-1个月的少,则需要本月需要(need[n-1]-need[n])*fire+need[n]*salary的钱

假设第n-1个月雇佣k个人是最有子结构;

则状态方程:dp[i][j]=dp[i][k]+(need[n]-need[n-1])*hire+need[n]*salary

                  或dp[i][j]=dp[i][k]+(need[n-1]-need[n])*fire+need[n]*salary

 

code:

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

const int INF = 0x7fffffff; 

int hire,salary,fire;
int need[15],dp[15][505];

int main()
{
	int n,mini,maxn,ans;
	while(scanf("%d",&n)&&n)
	{
		maxn=0;
		scanf("%d %d %d",&hire,&salary,&fire);
		for(int i=1;i<=n;i++)
		{
			scanf("%d",&need[i]);
			maxn=max(maxn,need[i]);
		}
		if(maxn==0)
		{
			printf("0\n");
			continue;
		}
		memset(dp,0,sizeof(dp));
		for(int i=need[1];i<=maxn;i++)
		{
			dp[1][i]=(hire+salary)*i;
		}
		int temp; 
		for(int i=2;i<=n;i++)
		{
			for(int j=need[i];j<=maxn;j++)
			{
				mini=INF;
				for(int k=need[i-1];k<=maxn;k++)
				{	
					if(j>=k)
					{
						temp=dp[i-1][k]+(j-k)*hire+j*salary;
					}
					else
					{
						temp=dp[i-1][k]+(k-j)*fire+j*salary;
					}
					mini=min(mini,temp);
				}
				dp[i][j]=mini;
			}
		}
		ans=INF;
		for(int i=need[n];i<=maxn;i++)
		{
			if(ans>dp[n][i])
				ans=dp[n][i];
		}
		printf("%d\n",ans);
	}
	return 0;
}

 

1
2
分享到:
评论

相关推荐

    hdu动态规划题目

    关于hdu的动态规划的题目,包括一些水题,还有一些经典的动态规划题目。

    DP.rar_DP_hdu_动态规划_动态规划 C++

    描述中提到的“动态规划DP题解”和“POJ HDU部分动态规划DP题解”,说明这个压缩包包含了针对HDU和POJ(Problemset Online Judge)平台上一些动态规划题目的解答。POJ是一个著名的在线编程竞赛平台,其中包含了大量...

    HDU DP动态规划

    【标题】"HDU DP动态规划"涉及到的是在算法领域中的动态规划(Dynamic Programming,简称DP)技术,这是解决复杂问题的一种高效方法,尤其适用于有重叠子问题和最优子结构的问题。动态规划通常用于优化多阶段决策...

    hdu动态规划算法集锦

    根据提供的信息,我们可以总结出以下关于“hdu动态规划算法集锦”的知识点: ### 动态规划基础概念 动态规划是一种解决多阶段决策问题的方法,它通过将原问题分解为互相重叠的子问题,利用子问题的解来构建原问题...

    HDU 动态规划(46道题目

    ### HDU 动态规划精选解析 #### 一、Robberies (抢劫) **问题描述:** 本题涉及抢劫问题,需要求出在一定条件下,能够抢得的最大金额的同时保证最大的逃脱概率。每家银行有一个特定的价值(金额)以及一个逃脱的...

    acm课件动态规划题(杭电)(HDU)

    本资源“acm课件动态规划题(杭电)(HDU)”显然是针对这个领域的训练材料,特别适合于提升ACM竞赛选手在解决动态规划题目上的能力。杭州电子科技大学(Hangzhou Dianzi University, 简称HDU)是知名的在线编程竞赛...

    hdu acm 教案(3)

    动态规划是计算机科学中一种强大的问题解决方法,尤其在处理最优化问题时非常有效。在这个教案中,我们将深入探讨动态规划的基本概念、应用场景以及如何构建解决方案。 动态规划是一种通过将复杂问题分解为相互重叠...

    算法分析 递归与分治策略 动态规划 贪心算法 分支限界法 随机化算法等算法

    在IT领域,算法是解决问题的核心工具,而递归与分治策略、动态规划、贪心算法、回溯法、分支限界法以及随机化算法都是其中的重要组成部分。这些算法不仅适用于计算机科学,也在数据结构、优化问题和复杂计算中扮演着...

    hdu.rar_hdu

    这些代码通常包含了对各种算法的应用,例如排序、搜索、图论、动态规划等,对于学习算法和准备编程竞赛的初学者来说是一份宝贵的资源。 压缩包内的文件名“朝花夕拾——hdu”可能表示这是一系列关于HDU题目的代码...

    HDU动态规划

    HDU动态规划,此PPT系杭州电子科技大学ACM总教练刘春英老师所有, 特在此分享贡献给广大编程爱好者, 特别是ACMer!

    HDU_ACM培训课件(完整版)

    1. **算法基础**:这部分通常会讲解基础的数据结构,如数组、链表、栈、队列、树、图等,以及基础算法,如排序、搜索、动态规划、贪心算法等。这些是ACM竞赛中常遇到的问题类型,对解题至关重要。 2. **高级算法**...

    算法设计与分析实验六:使用动态规划算法解决存钱问题(java实现、hdu1114)(csdn)————程序.pdf

    在这个实验中,主要的目标是通过动态规划算法来解决一个实际问题——如何在不打破存钱罐的情况下,找到装满存钱罐所需的最小金额。实验使用Java语言进行实现,并且是针对HDU 1114题目的解决方案。 动态规划是一种...

    (HDUACM201403版_05)动态规划

    杭电ACM课件2014版之 (HDUACM201403版_05)动态规划

    动态规划详解

    可能是对动态规划深入讲解的一堂课,而 "(HDUACM2010版_04)动态规划.ppt"、"3_ACM动态规划.ppt" 和 "hdu1160.txt" 可能是针对ACM竞赛的动态规划训练资料,特别是"hdu1160.txt"可能是一个具体的背包问题实例。...

    动态规划DP结题报告

    动态规划DP题解 POJ HDU 动态规划解题报告

    杭电acmDP(动态规划)

    动态规划(Dynamic Programming,简称DP)是计算机科学中一种强大的算法思想,特别是在解决最优化问题时,它能有效地处理复杂度。在ACM(国际大学生程序设计竞赛)中,动态规划是不可或缺的一部分,帮助参赛者解决...

    HDU题目java实现

    9. **动态规划**:这是一种优化策略,通过构建状态转移方程来求解问题,例如背包问题、最长公共子序列、矩阵链乘法等。 10. **回溯法**:在解决组合优化问题和逻辑推理问题时常用,如八皇后问题、数独求解等。 11....

    ACM HDU题目分类

    DP(Dynamic Programming,动态规划)是一种非常重要的算法思想,在 ACM HDU 题目分类中,DP 问题占据了很大的比例。例如,1003 DP 经典问题,最大连续子段和;1024 经典 DP,最大 M 子段和;1025 经典 DP,最长递增...

    动态规划背包问题入门

    动态规划入门,hdu上的动态规划入门题的结题报告。 hdu 1171,hdu 1059,hdu 2159,hdu 2191,hdu 3496

    HDU_2010.rar_hdu 2010_hdu 20_hdu acm20

    【标题】"HDU_2010.rar"是一个压缩包文件,其中包含了与"HDU 2010"相关的资源,特别是针对"HDU ACM20"比赛的编程题目。"hdu 2010"和"hdu 20"可能是该比赛的不同简称或分类,而"hdu acm20"可能指的是该赛事的第20届...

Global site tag (gtag.js) - Google Analytics