【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 ( ...
随机推荐
- Internet Technologe
Store and Forward Networking Efficient Message Transmission:Packet Switching(分组交换) Challenge: in a s ...
- 我爱C语言
各位同志们好,我是来自计算机系的谢畅,我是一个平时看起来高冷其实很逗比的人,我的爱好有很多但只是会一些基础比如游泳,篮球,听听音乐什么的.我的特长是弹吉他虽然弹得不是很溜,我还喜欢朗诵.刚开始我并不是 ...
- BAT批处理(六)
字符串处理 批处理有着具有非常强大的字符串处理能力,其功能绝不低于C语言里面的字符串函数集.批处理中可实现的字符串处理功能有:截取字符串内容.替换字符串特定字段.合并字符串.扩充字符串等功能.下面对这 ...
- Print之modile, level
一般print打印的design都会引入module, level. xxxprint(module, level, arg,...)... 每个Module都可以有各自的bitmap,代表这个mod ...
- 基于c++的ostu算法的实现
图像二值化算法是图像处理的基础.一般来说,二值化算法可以分为两个类别:全局二值化和局部二值化.全局二值化是指通过某种算法找到一个全局的阈值T,对图像中坐标为(x,y)的像素值做如下处理: Ostu就是 ...
- delphi鼠标状态
Screen.Cursor := crNo;
- linux 安装 bitnamid-redmine
Unix 和 Linux 安装 Perl Unix/Linux 系统上 Perl 安装步骤如下: 通过浏览器打开 http://www.perl.org/get.html. 下载适用于 Unix/Li ...
- Java基础之开关语句详解
switch 语句是单条件多分支的开关语句,它的一般格式定义如下(其中break语句是可选的): switch(表达式) { case 常量值: 若干个语句 break; case 常量值: 若干个 ...
- What’s That NetScaler Reset Packet?
What’s That NetScaler Reset Packet? https://www.citrix.com/blogs/2014/05/20/whats-that-netscaler-res ...
- 2016 China Final E - Bet
/************************************************************************* > File Name: E.cpp > ...