POJ 2393 贪心 简单题
2015-08-02 20:47
232 查看
有一家生产酸奶的公司,连续n周,每周需要出货numi的单位,已经知道每一周生产单位酸奶的价格ci,并且,酸奶可以提前生产,但是存储费用是一周一单位s费用,问最少的花费。
对于要出货的酸奶,要不这一周生产,要不提前生产。
什么时候采用什么生产方式呢?
若第i周的货提前生产的话,假设在j周生产,则费用为(i-j)*s+c[j]
若c[i]>(i-j)*s+c[j],则更新c[i]=(i-j)*s+c[j]
更新要O(n^2)?
可以证明,最优的生产方式是,要不在这一周生产,要不在上一周生产(这里的上一周的c已经是更新过的)
O(n)更新数组c即可。
View Code
对于要出货的酸奶,要不这一周生产,要不提前生产。
什么时候采用什么生产方式呢?
若第i周的货提前生产的话,假设在j周生产,则费用为(i-j)*s+c[j]
若c[i]>(i-j)*s+c[j],则更新c[i]=(i-j)*s+c[j]
更新要O(n^2)?
可以证明,最优的生产方式是,要不在这一周生产,要不在上一周生产(这里的上一周的c已经是更新过的)
O(n)更新数组c即可。
#include<cstdio> #include<cstring> using namespace std; const int maxn=1e4+5; #define LL long long int c[maxn]; int num[maxn]; int main() { int n,s; while(~scanf("%d%d",&n,&s)) { for(int i=1;i<=n;i++) scanf("%d%d",&c[i],&num[i]); for(int i=2;i<=n;i++) { if(s+c[i-1]<c[i]) c[i]=s+c[i-1]; } LL ans=0; for(int i=1;i<=n;i++) { ans+=(LL)c[i]*num[i]; } printf("%lld\n",ans); } return 0; }
View Code
相关文章推荐
- 爬虫Spider
- HDFS文件操作
- HDU OJ Dividing 题目1059
- Python学习之函数
- 每天一个小知识点21(拖拽效果)
- Asp.net-知识总结(2)
- 【DB.MySQL】在Mac如何启动MySQL
- 虚幻3引擎-多线程渲染机制
- scrapy学习笔记--解析结果存储
- 调用startActivityForResult后onActivityResult立刻响应,返回当前页onActivityResult不响应的问题
- kiki's game
- 我多希望我学编程时,有人教我这些事!
- 拉格朗日乘数法
- 如何高性能布局
- 关于System V 信号量
- Android开发经典笔试面试题汇总(持续更新中)
- 敏捷开发下该深度思考的三个问题
- Shell 学习14 - Shell printf 命令
- hdoj 最简单的计算机
- ViewPager+Fragment问题