【BZOJ】1700: [Usaco2007 Jan]Problem Solving 解题
【题意】给定n道题,每月末发放工资m,要求从1解到n,每道题需要在当月初付费ai,下月初付费bi,多道题可以安排在同月,求最少月数。
【算法】DP
【题解】参考自:【bzoj1700】Problem Solving 解题 dp by GXZlegend
因为当月的选择同时关系着当月和下月,贪心是错误的,有如下反例:
50 5
40 10
10 40
10 5
10 3
10 2
因此考虑DP,令f[i][j]表示解决1~i题,最后一月解决j题的最小月数。(只保证满足当月开销,也就是下月开销之后再算)
sumA(i-j+1~i)<=m
f[i][j]=f[i-j][k]+1,sumB(i-j-k+1~i-j)+sumA(i-j+1~i)<=m
f[i][j]=f[i-j][k]+2,sumB(i-j-k+1~i-j)<=m
两式取小。
复杂度O(n^3)。
注意:初值全局设为inf,中间取min!
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=;
int f[maxn][maxn],n,m,suma[maxn],sumb[maxn],ans; int main(){
scanf("%d%d",&m,&n);
int u,v;
for(int i=;i<=n;i++){
scanf("%d%d",&u,&v);
suma[i]=suma[i-]+u;
sumb[i]=sumb[i-]+v;
}
memset(f,0x3f,sizeof(f));//
f[][]=;
for(int i=;i<=n;i++){
for(int j=;i-j>=;j++){
for(int k=;i-j-k>=;k++)if(suma[i]-suma[i-j]<=m){
if(sumb[i-j]-sumb[i-j-k]<=m)f[i][j]=min(f[i][j],f[i-j][k]+);//
if(sumb[i-j]-sumb[i-j-k]+suma[i]-suma[i-j]<=m)f[i][j]=min(f[i][j],f[i-j][k]+);//
}
} }
ans=0x3f3f3f3f;
for(int j=;n-j>=;j++)if(sumb[n]-sumb[n-j]<=m)ans=min(ans,f[n][j]+);
printf("%d",ans);
return ;
}
【BZOJ】1700: [Usaco2007 Jan]Problem Solving 解题的更多相关文章
- BZOJ 1700 [Usaco2007 Jan]Problem Solving 解题(单调DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1700 [题目大意] 共有p道题目要做,每个月收入只有n元,用于付钱做题之外的部分都会吃 ...
- bzoj:1700: [Usaco2007 Jan]Problem Solving 解题
Description 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地说,他们有P (1 <= P <= 300) 道题目要做. 他们还离开了农场 ...
- bzoj 1700: [Usaco2007 Jan]Problem Solving 解题 ——dp
Description 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地说,他们有P (1 <= P <= 300) 道题目要做. 他们还离开了农场 ...
- bzoj 1700: [Usaco2007 Jan]Problem Solving 解题【dp】
很像贪心的dp啊 这个定金尾款的设定让我想起了lolita和jk制服的尾款地狱-- 设f[i][j]为从j到i的付定金的最早月份然后从f[k][j-1]转移来,两种转移f[i][j]=min(f[i] ...
- 【BZOJ1700】[Usaco2007 Jan]Problem Solving 解题 动态规划
[BZOJ1700][Usaco2007 Jan]Problem Solving 解题 Description 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地 ...
- [bzoj1700]: [Usaco2007 Jan]Problem Solving 解题
不能贪心!不能贪心!不能贪心! 反正有反例(有的题目月初支付款很少,月末支付款很大,和前面的题凑到一个月的话可能导致下个月写不了= =这时放后一个月,和后面的题一起开始写可能更优) 比如: 50 44 ...
- BZOJ1700: [Usaco2007 Jan]Problem Solving 解题
每月m<=1000块钱,有n<=300道题,要按顺序做,每月做题要花钱,花钱要第一个月预付下个月立即再付一次,给出预付和再付求最少几个月做完题,第一个月不做. 神奇的DP..竟没想出来.. ...
- bzoj 1700 Problem Solving 解题 dp
[Usaco2007 Jan]Problem Solving 解题 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 492 Solved: 288[Sub ...
- BZOJ 1635: [Usaco2007 Jan]Tallest Cow 最高的牛
题目 1635: [Usaco2007 Jan]Tallest Cow 最高的牛 Time Limit: 5 Sec Memory Limit: 64 MB Description FJ's N ( ...
随机推荐
- Python 字符串与基本语句
Python特点 python中没有变量的声明 语句结束后没有分号 严格要求缩进 支持很长很长的大数运算(直接在Idle中输入即可) 用"#"来注释 BIF:Bulit-in fu ...
- Qt窗口及控件-窗口Close()自动释放
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt-窗口Close()后自动释放空间 本文地址:http://techieliang ...
- Thinkphp5的使用phpmailer实现发邮件功能(163邮箱)
Thinkphp5本身并没有实现发邮件的功能,至少据我所知. 本文利用网易邮箱作为发邮件的邮箱.作为发送邮件的前提是需要开启SMTP服务,打开网易邮件,点击设置按钮,如下图所示 勾选smtp服务 保存 ...
- phpcms V9如何判断用户是否登录以及登陆后的标签写法问题
首先要获取userid {php$userid=param::get_cookie('_userid');} 然后再判断是否为空 {if $userid}...这里写已经登录之后的代码...{els ...
- WCF面试精典题汇总
1.WCF接口中的参数改名问题 在写WCF Web Service接口的时候,如果你对接口的参数名做改动的时候,一定要记住Update所有应用该Web service的客户端的Referrence,否 ...
- volatile并不能保证数据同步、只能保证读取到最新主内存数据
在 java 垃圾回收整理一文中,描述了jvm运行时刻内存的分配.其中有一个内存区域是jvm虚拟机栈,每一个线程运行时都有一个线程栈, 线程栈保存了线程运行时候变量值信息.当线程访问某一个对象时候值的 ...
- React & event-pooling & bug
React & event-pooling & bug event-pooling https://reactjs.org/docs/events.html#event-pooling ...
- asp.net获取文件绝对路径
一般我们在asp.net中使用HttpContext.Current.Request.MapPath或者 HttpContext.Current.Server.MapPath来获取文件的绝对路径, p ...
- web服务器压测工具siege、ab
web服务器压测工具也挺多,这里只介绍我用过的这两种--siege(for linux).ab(for windows). 一.siege 1.简介: Siege是一款开源的压力测试工具,设计用于评估 ...
- 关于 [lambda x: x*i for i in range(4)] 理解
题目: lst = [lambda x: x*i for i in range(4)] res = [m(2) for m in lst] print res 实际输出:[6, 6, 6, 6] 想要 ...