考状态的dp

我的方法可能比较奇怪

设f[i,j]表示第i个月解决j个问题可以最多解决到第几个问题

容易知道,答案(月份)不会超过2n+1;

f[i,j]=max(f[i-1,k]+j)

复杂度为O(n^3)

代码如下

 var f:array[..,..] of longint;
    b,a,sa,sb:array[..] of longint;
    p,y,q,i,j,k,n,m:longint;
function max(a,b:longint):longint;
  begin
    if a>b then exit(a) else exit(b);
  end; begin
  readln(m,n);
  for i:= to n do
  begin
    readln(b[i],a[i]);
    sa[i]:=sa[i-]+a[i];
    sb[i]:=sb[i-]+b[i];
  end;
  f[,]:=;
  i:=;
  while i<=*n+ do
  begin
    inc(i);
    f[i,]:=f[i-,];
    for j:= to n do
    begin
      if f[i-,j]= then break;
      f[i,]:=max(f[i,],f[i-,j]);
    end;
    for j:= to n do
    begin
      for k:= to n do
      begin
        if (f[i-,k]=) and (k<>) then break;    //后面的状态不存在,直接退
        p:=f[i-,k];
        q:=f[i-,k]+j;
        if q>n then continue;
        y:=f[i-,k]-k;
        if (sb[q]-sb[p]+sa[p]-sa[y]<=m) and (sa[q]-sa[p]<=m) then          //判断是否够这个月花的
          f[i,j]:=max(f[i,j],f[i-,k]+j);
      end;
      if f[i,j]>=n then
      begin
        writeln(i+);    //注意付完款一定是下个月
        halt;
      end;
      if f[i,j]= then break;
    end;
  end;
end.

话说代码有的地方可能写的比较冗杂……

poj3265的更多相关文章

随机推荐

  1. CentOS 安装配置memcached (转)

    1.先下载memcached 和libevent. libevent 最新的稳定版: wget http://monkey.org/~provos/libevent-1.4.14b-stable.ta ...

  2. phpstorm 自定义函数配置

    phpstorm 自定义函数配置 打开设置->活动模板->

  3. Spark机器学习 Day1 机器学习概述

    Spark机器学习 Day1 机器学习概述 今天主要讨论个问题:Spark机器学习的本质是什么,其内部构成到底是什么. 简单来说,机器学习是数据+算法. 数据 在Spark中做机器学习,肯定有数据来源 ...

  4. How to install Hadoop

    1.How to install Hadoop 3.0.0 http://blog.sina.com.cn/s/blog_4a1f59bf01010kx3.html 2.How to install ...

  5. codeblocks常用快捷键

    CodeBlocks常用操作快捷键编辑部分:Ctrl + A:全选Ctrl + C:复制Ctrl + X: 剪切Ctrl + V:粘贴Ctrl + Z:撤销Ctrl + S:保存Ctrl + Y / ...

  6. Qt播放mp3

    .pro项目文件中加入 QT += phonon 包含头    #include <phonon/Phonon> 播放文件    Phonon::MediaObject *media = ...

  7. log4j示例

    示例代码:此示例从控制台输入日志,设置了输出等级. # # Log4J Settings for log4j 1.2.x (via jakarta-commons-logging) # # The f ...

  8. [转载]EasyUI Pagination 分页的两种做法

    EasyUI 的 datagrid 支持服务器端分页,但是官方的资料比较少,以下总结了两种 datagrid 的服务器端分页机制,可根据情况具体使用. 一:使用 datagrid 默认机制 后台: p ...

  9. [Database]Operators

    Arithmetic Operators +,-,×,÷ Comparison Operators =,<>,!=,>,<,>=,<= BETWEEN,IN,IS ...

  10. 使用rsyslog+loganalzey收集日志显示客户端ip

    http://www.ituring.com.cn/article/128536 rsyslog localhost 转发 http://bigsec.net/one/tool/rsyslog.htm ...