hdu 1158 Employment Planning
来源:互联网 发布:飞利浦呼吸机读卡软件 编辑:程序博客网 时间:2024/04/30 18:54
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;const int MAX = 500005;int dp[13][MAX] = {0};int main(){ int n, h, s, f, p[20], mw; while (cin>>n, n) { cin>>h>>s>>f; mw = 0; for (int i = 1; i <= n; i++) { cin>>p[i]; if (p[i] > mw) mw = p[i]; } for (int i = 1; i <= mw; i++) { dp[1][i] = i * (s + h); } for (int i = 2; i <= n; i++) { for (int j = mw; j >= p[i]; j--) { dp[i][j] = 1000000000; for (int k = mw; k >= p[i-1]; k--) //(1) { if (k >= j) dp[i][j] = min(dp[i][j], dp[i-1][k]+(k-j)*f+j*s); else dp[i][j] = min(dp[i][j], dp[i-1][k]+j*s+(j-k)*h); } } } int ans = 1000000000; for (int i = p[n]; i <= mw; i++) if (ans > dp[n][i]) ans = dp[n][i]; cout<<ans<<endl; }}(1)
刚开始时写成了1到mw,就错了。因为上一个月工作的人数必定是大于或等于p[i-1]的,因此就没有必要从1到mw循环。而且,上一个月的人数是不可能小于p[i-1]的,因此若是从1到mw的循环会错,对应到dp数组中,这个月的花费dp[i-1][j]是不可能从dp[i-1][g](g<p[i-1])转移过来的。
0 0
- hdu 1158 Employment Planning
- hdu 1158 Employment Planning
- HDU 1158 Employment Planning
- HDU 1158 Employment Planning
- HDU 1158 Employment Planning
- HDU 1158 Employment Planning
- hdu 1158 Employment Planning
- hdu 1158 Employment Planning
- HDU 1158 Employment Planning
- HDU 1158 Employment Planning
- HDU 1158 Employment Planning
- hdu 1158 Employment Planning
- hdu 1158 Employment Planning
- HDU 1158 Employment Planning
- hdu 1158 Employment Planning
- hdu 1158 Employment Planning
- hdu 1158 Employment Planning
- hdu 1158 Employment Planning
- Spring(四)基于XML装配bean(实例化方式)
- python爬虫简单的抓页面图片并保存到本地
- View滑动冲突处理方法(外部拦截法、内部拦截法)
- overridePendingTransition函数
- http://www.mat.univie.ac.at/~neum/glopt.html
- hdu 1158 Employment Planning
- Android静态安全检测 -> 强制类型转换本地拒绝服务漏洞
- json-server快速“伪造”后台接口
- 机器学习中的PR曲线和ROC曲线
- URL Schemes 程序跳转
- 图像识别(5)——《OpenCV3编程入门-毛星云》第三部分 掌握imgproc组件
- python-简单的邮件发送
- 苏嵌27 16.12.05
- markdown的来龙去脉