【题目链接】 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;
}

最新文章

  1. [转]实现一个无法被继承的C++类
  2. Swing应用开发实战系列之四:组件内容实时刷新问题
  3. cocos2d制作动态光晕效果基础——blendFunc
  4. Oracle11g完全卸载步骤
  5. YUV / RGB 格式及快速转换算法
  6. table边框1px
  7. WEB 开发者应该具备的 6 大技能?
  8. HTML5发展史
  9. servlet+jsp update修改页面的实现,整整搞了两个小时才搞定
  10. Luogu P1451 求细胞数量
  11. 字符编码笔记:ASCII,Unicode和UT…
  12. zprofiler三板斧解决cpu占用率过高问题(转载)
  13. 关于Win10下IE11只能以管理员身份运行的处理方式
  14. 给kali linux2.0装一个中文输入法
  15. 1. Two Sum (快速排序;有序数组的查找: 两个指针; 哈希表)
  16. mget命令, ftp命令详解
  17. (转)C++初始化与赋值
  18. ASP.NET mvc下在Controller下action的跳转方式
  19. MySql csv文件导入导出
  20. mysql免安装版配置+navicat测试

热门文章

  1. java springmvc4 图片或文件上传
  2. CSS(Cascading Style Shee)
  3. Python3安装Celery模块后执行Celery命令报错
  4. 【C语言】Coursera课程《计算机程式设计》台湾大学刘邦锋——Week6 String课堂笔记
  5. 【转】C++多继承的细节
  6. Bit banging
  7. 安装openssl-0.9.8报错out range of signed 32bit displacement .
  8. [New Learn] RunLoop学习-官方译文
  9. OpenStack 计算服务 Nova介绍和控制节点部署 (八)
  10. Java之IO流的关闭