BZOJ 1700 [Usaco2007 Jan]Problem Solving 解题(单调DP)
【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=1700
【题目大意】
共有p道题目要做,每个月收入只有n元,用于付钱做题之外的部分都会吃掉,
做题要按顺序来解决,对于一道题,在这个月需要付预做费用,下个月开始的时候还要付完成费用,
上一个月才会发上个月的工资,问最少几个月能做完这些题目
【题解】
dp[j][i]表示当前最后一个月做j到i的题目用的最小月份,
我们发现如果当前月能结算上个月的完成费用和这个月的预付费用,则转移时答案加一,
否则转移时答案加2,顺序dp即可。
【代码】
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int n,p,a[1010],b[1010],as[1010],bs[1010],dp[310][310];
int main(){
while(~scanf("%d%d",&n,&p)){
for(int i=1;i<=p;i++){
scanf("%d%d",&a[i],&b[i]);
as[i]=as[i-1]+a[i];
bs[i]=bs[i-1]+b[i];
}memset(dp,0x3f,sizeof(dp));
for(int i=1;i<=p;i++){
if(as[i]<=n&bs[i]<=n)dp[1][i]=1;
else break;
}int ans=0x3f3f3f3f3f;
for(int i=1;i<=p;i++){
for(int j=1;j<=i;j++){
for(int k=1;k<j;k++){
if(as[i]-as[j-1]<=n&&bs[i]-bs[j-1]<=n)
dp[j][i]=min(dp[j][i],dp[k][j-1]+2);
if(as[i]-as[j-1]+bs[j-1]-bs[k-1]<=n&&bs[i]-bs[j-1]<=n)
dp[j][i]=min(dp[j][i],dp[k][j-1]+1);
}if(i==p)ans=min(ans,dp[j][i]);
}
}printf("%d\n",ans+2);
}return 0;
}
BZOJ 1700 [Usaco2007 Jan]Problem Solving 解题(单调DP)的更多相关文章
- 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] ...
- 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 解题
[题意]给定n道题,每月末发放工资m,要求从1解到n,每道题需要在当月初付费ai,下月初付费bi,多道题可以安排在同月,求最少月数. [算法]DP [题解]参考自:[bzoj1700]Problem ...
- 【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 ( ...
随机推荐
- HDU 1002 A + B Problem II (大数加法)
题目链接 Problem Description I have a very simple problem for you. Given two integers A and B, your job ...
- mac系统用docker安装oracle数据库
oracle没有mac可用的版本,最好的办法是通过docker安装 一.下载docker 1.通过brew下载 brew cask install docker 2.手动下载(需要vpn) https ...
- vue.js将一个对象的所有属性作为prop进行传递
1.方法一:使用不带参数的v-bind写法 <div id="app"> <child v-bind="todo"></child ...
- jeecg3.7中DictSelect数据字典下拉选择框的用法
1.参数 属性名 类型 描述 ...
- Pythone3 sys模块
1.sys.argv 可以实现从程序外部向程序传递参数2.sys.exit() 程序中间退出,exit(0)正常退出,其他为异常退出3.sys.getdefaultencoding() 获取系统编码方 ...
- Python2.7.3 Tkinter Entry(文本框) 说明
Python学习记录--关于Tkinter Entry(文本框)的选项.方法说明,以及一些示例. 属性(Options) background(bg) borderwidth(bd) cursor ...
- python之operator操作符函数
operator函数主要分为以下几类:对象比较.逻辑比较.算术运算和序列操作. 举例: #python 3.4 >>> operator.eq(1,2)False >>& ...
- Sql Server 2014/2012/2008/2005 数据库还原出现 3154错误的解决办法
在Sql Server 数据库还原出现 3154错误 解决方法1:不要在数据库名字上点右键选择还原,而要是在根目录“数据库”三个字上点右键选择还原,然后再选择数据库,问题便可以解决,如果不行参照方法 ...
- hadoop安装 伪分布
伪分布hadoop 安装总结 准备,在配置中hadoop用的9000端口,如果有其它软件用着这个端口,建议更换后再进行下面配置,以避免出现错误.比如php-fpm经常使用9000端口. 一.下载jdk ...
- Jquery屏蔽浏览器的F1-F12快捷键,在IE,GOOGLE下测试均无问题
在网上找了找,很多都是js实现的,东找西找,再加上自己的想法也勉强的完成了,直接看代码 <script type="text/javascript" src="Sc ...