题目链接:
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; }
相关推荐
关于hdu的动态规划的题目,包括一些水题,还有一些经典的动态规划题目。
描述中提到的“动态规划DP题解”和“POJ HDU部分动态规划DP题解”,说明这个压缩包包含了针对HDU和POJ(Problemset Online Judge)平台上一些动态规划题目的解答。POJ是一个著名的在线编程竞赛平台,其中包含了大量...
【标题】"HDU DP动态规划"涉及到的是在算法领域中的动态规划(Dynamic Programming,简称DP)技术,这是解决复杂问题的一种高效方法,尤其适用于有重叠子问题和最优子结构的问题。动态规划通常用于优化多阶段决策...
根据提供的信息,我们可以总结出以下关于“hdu动态规划算法集锦”的知识点: ### 动态规划基础概念 动态规划是一种解决多阶段决策问题的方法,它通过将原问题分解为互相重叠的子问题,利用子问题的解来构建原问题...
### HDU 动态规划精选解析 #### 一、Robberies (抢劫) **问题描述:** 本题涉及抢劫问题,需要求出在一定条件下,能够抢得的最大金额的同时保证最大的逃脱概率。每家银行有一个特定的价值(金额)以及一个逃脱的...
本资源“acm课件动态规划题(杭电)(HDU)”显然是针对这个领域的训练材料,特别适合于提升ACM竞赛选手在解决动态规划题目上的能力。杭州电子科技大学(Hangzhou Dianzi University, 简称HDU)是知名的在线编程竞赛...
动态规划是计算机科学中一种强大的问题解决方法,尤其在处理最优化问题时非常有效。在这个教案中,我们将深入探讨动态规划的基本概念、应用场景以及如何构建解决方案。 动态规划是一种通过将复杂问题分解为相互重叠...
在IT领域,算法是解决问题的核心工具,而递归与分治策略、动态规划、贪心算法、回溯法、分支限界法以及随机化算法都是其中的重要组成部分。这些算法不仅适用于计算机科学,也在数据结构、优化问题和复杂计算中扮演着...
这些代码通常包含了对各种算法的应用,例如排序、搜索、图论、动态规划等,对于学习算法和准备编程竞赛的初学者来说是一份宝贵的资源。 压缩包内的文件名“朝花夕拾——hdu”可能表示这是一系列关于HDU题目的代码...
HDU动态规划,此PPT系杭州电子科技大学ACM总教练刘春英老师所有, 特在此分享贡献给广大编程爱好者, 特别是ACMer!
1. **算法基础**:这部分通常会讲解基础的数据结构,如数组、链表、栈、队列、树、图等,以及基础算法,如排序、搜索、动态规划、贪心算法等。这些是ACM竞赛中常遇到的问题类型,对解题至关重要。 2. **高级算法**...
在这个实验中,主要的目标是通过动态规划算法来解决一个实际问题——如何在不打破存钱罐的情况下,找到装满存钱罐所需的最小金额。实验使用Java语言进行实现,并且是针对HDU 1114题目的解决方案。 动态规划是一种...
杭电ACM课件2014版之 (HDUACM201403版_05)动态规划
可能是对动态规划深入讲解的一堂课,而 "(HDUACM2010版_04)动态规划.ppt"、"3_ACM动态规划.ppt" 和 "hdu1160.txt" 可能是针对ACM竞赛的动态规划训练资料,特别是"hdu1160.txt"可能是一个具体的背包问题实例。...
动态规划DP题解 POJ HDU 动态规划解题报告
动态规划(Dynamic Programming,简称DP)是计算机科学中一种强大的算法思想,特别是在解决最优化问题时,它能有效地处理复杂度。在ACM(国际大学生程序设计竞赛)中,动态规划是不可或缺的一部分,帮助参赛者解决...
9. **动态规划**:这是一种优化策略,通过构建状态转移方程来求解问题,例如背包问题、最长公共子序列、矩阵链乘法等。 10. **回溯法**:在解决组合优化问题和逻辑推理问题时常用,如八皇后问题、数独求解等。 11....
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 ACM20"比赛的编程题目。"hdu 2010"和"hdu 20"可能是该比赛的不同简称或分类,而"hdu acm20"可能指的是该赛事的第20届...