cf 467 C

从序列中选出 \(k\) 段连续的 \(m\) 个数

最大化总和

\(f_{i, j}\) 表示前 \(i\) 个位置中选出了 \(j\) 段

转移显然

#include <bits/stdc++.h>

const int N = 5010;

long long f[N][N];
int n, m, k;
long long Sum[N]; int main() {
std:: cin >> n >> m >> k;
for(int i = 1; i <= n; i ++) {
std:: cin >> Sum[i];
Sum[i] += Sum[i - 1];
}
for(int i = 1; i <= n; i ++) {
for(int j = 1; j <= k; j ++) {
if(i - m + 1 > 0) f[i][j] = f[i - m][j - 1] + Sum[i] - Sum[i - m];
f[i][j] = std:: max(f[i - 1][j], f[i][j]);
}
}
std:: cout << f[n][k];
return 0;
}

51nod 1354

给出序列 \(a\) 和一个整数 \(k\)

求子序列的乘积是 \(k\) 的倍数的方案数

\(f_{i, j}\) 表示前 \(i\) 个数,乘积是 \(j\) 的方案数

\(f_{i, j} = f_{i - 1, \frac{j}{a_{i - 1}}} + f_{i - 1, j}\)

由于 \(k\) 很大

显然单纯的数组是无法完成的

这里可以使用 \(map\), 通过遍历完成

#include <bits/stdc++.h>

const int N = 1010, Mod = 1e9 + 7;

std:: map <int, int> Map[N];
int n, k, t;
int A[N]; int main() {
std:: cin >> t;
for(; t; t --) {
std:: cin >> n >> k;
Map[0].clear();
for(int i = 1; i <= n; i ++) {
std:: cin >> A[i];
Map[i].clear();
}
Map[0][k] = 1;
for(int i = 0; i < n; i ++)
for(std:: map <int, int> :: iterator it = Map[i].begin(); it != Map[i].end(); it ++) {
if(it-> first % A[i + 1] == 0)
(Map[i + 1][it-> first / A[i + 1]] += it-> second) %= Mod;
(Map[i + 1][it-> first] += it-> second) %= Mod;
}
std:: cout << Map[n][1] << "\n";
}
return 0;
}

openjudge 6047

\(w \times h\) 的蛋糕,切成 \(m\) 块

每刀可以将一块切成两块

求最小化的最大蛋糕面积

\(f_{i, j, k}\) 表示将 \(i \times j\) 的蛋糕切成 \(m\) 块时的最小化的最大蛋糕面积

枚举蛋糕的长和宽以及切成的块数

固定好后枚举长从哪里分割 \(h\) 以及分成的块数 \(p\)

\(f_{i, j, k} = min(f_{i, j, k}, max(f_{h, j, p}, f_{i - h, j, p}))\)

同理枚举列

\(f_{i, j, k} = min(f_{i, j, k}, max(f_{i, l, p}, f_{i, j - l, p}))\)

#include <bits/stdc++.h>

const int N = 25;

int f[N][N][N];

int main() {
int w, h, m;
while(std:: cin >> w >> h >> m) {
memset(f, 0, sizeof f);
if(w == 0 && h == 0 && m == 0) break;
for(int i = 1; i <= w; i ++)
for(int j = 1; j <= h; j ++)
f[i][j][1] = i * j;
for(int i = 1; i <= w; i ++)
for(int j = 1; j <= h; j ++)
for(int k = 2; k <= std:: min(i * j, m); k ++) {
f[i][j][k] = (1 << 30);
for(int H = 1; H < i; H ++)
for(int p = 1; p < k; p ++)
f[i][j][k] = std:: min(f[i][j][k], std:: max(f[H][j][p], f[i - H][j][k - p]));
for(int L = 1; L < j; L ++)
for(int p = 1; p < k; p ++)
f[i][j][k] = std:: min(f[i][j][k], std:: max(f[i][L][p], f[i][j - L][k - p]));
}
std:: cout << f[w][h][m] << "\n";
}
return 0;
}

dp * 3的更多相关文章

  1. BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]

    1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 4142  Solved: 1964[Submit][Statu ...

  2. 2013 Asia Changsha Regional Contest---Josephina and RPG(DP)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4800 Problem Description A role-playing game (RPG and ...

  3. AEAI DP V3.7.0 发布,开源综合应用开发平台

    1  升级说明 AEAI DP 3.7版本是AEAI DP一个里程碑版本,基于JDK1.7开发,在本版本中新增支持Rest服务开发机制(默认支持WebService服务开发机制),且支持WS服务.RS ...

  4. AEAI DP V3.6.0 升级说明,开源综合应用开发平台

    AEAI DP综合应用开发平台是一款扩展开发工具,专门用于开发MIS类的Java Web应用,本次发版的AEAI DP_v3.6.0版本为AEAI DP _v3.5.0版本的升级版本,该产品现已开源并 ...

  5. BZOJ 1597: [Usaco2008 Mar]土地购买 [斜率优化DP]

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4026  Solved: 1473[Submit] ...

  6. [斜率优化DP]【学习笔记】【更新中】

    参考资料: 1.元旦集训的课件已经很好了 http://files.cnblogs.com/files/candy99/dp.pdf 2.http://www.cnblogs.com/MashiroS ...

  7. BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 9812  Solved: 3978[Submit][St ...

  8. px、dp和sp,这些单位有什么区别?

    DP 这个是最常用但也最难理解的尺寸单位.它与“像素密度”密切相关,所以 首先我们解释一下什么是像素密度.假设有一部手机,屏幕的物理尺寸为1.5英寸x2英寸,屏幕分辨率为240x320,则我们可以计算 ...

  9. android px转换为dip/dp

    /** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ public int dipTopx(Context context, float dpValue) { final floa ...

  10. POJ 3254. Corn Fields 状态压缩DP (入门级)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9806   Accepted: 5185 Descr ...

随机推荐

  1. mybatis执行DDL语句

    对MyBatis一直停留在仅仅会用的阶段,常用的场景就是通过MyBatis对表数据进行DML(insert, delete, update等)操作,从来没有想过通过MyBatis对数据库进行DDL(c ...

  2. mouseenter 与 mouseover 区别于选择

    mouseover事件, 箭头在子元素移动会触发冒泡事件,  子元素的鼠标箭头可触父元素方法, 相反,mouseenter事件功能与mouseover类似, 但鼠标进入某个元素不会冒泡触发父元素方法. ...

  3. vscode之万里挑一

    前置 我们经常在工作区中打开很多项目文件夹,找起来比较麻烦. 步骤

  4. PEB TEB结构体使用

    PEB TEB结构体使用一个可执行文件被OS加载到内存,并处理完成相关的模块加载,导入表处理……及其他必须处理后,形成一个进程.在OS内核中保存有一份关于这个进程的身份证信息,就是平常看到的HANDL ...

  5. SQL case when 遇到null值

    case  when f.FPH is  NULL then a.HSJE else f.KPHSJE  end    yes case f.FPH  when   NULL then a.HSJE ...

  6. RabbitMQ消息队列入门(一)——RabbitMQ消息队列的安装(Windows环境下)

    一.RabbitMQ介绍1.RabbitMQ简介RabbitMQ是一个消息代理:它接受和转发消息.你可以把它想象成一个邮局:当你把你想要发布的邮件放在邮箱中时,你可以确定邮差先生最终将邮件发送给你的收 ...

  7. 笔记 - C#从头开始构建编译器 - 2

    视频与PR:https://github.com/terrajobst/minsk/blob/master/docs/episode-02.md 作者是 Immo Landwerth(https:// ...

  8. node.js 微信开发1-接入

    准备工作1 域名准备 无论是个人开发还是做公司项目域名都是必不可少的 前期我个人用过花生壳做个开发测试,挺好用的,就是现在要收费了,开通花生壳要收费,开通内网穿透要收费(为啥要内网穿透呢,因为微信接入 ...

  9. python之反射机制与callattr()、issubclass()、isinstance、type()相关

    一.反射机制 * 反射可以理解为 通过字符串的形式,动态导入模块: 利用字符串的形式,在对象(模块)中操作(查找/获取/删除/添加)成员,是一种基于字符串的事件驱动! 反射机制的内置函数 # hasa ...

  10. [转]memcached对key和value的限制 memcached的key最大长度和Value最大长度

    转自: 老白干之再干 memcached的简单限制就是键(key)和item的限制.最大键长为250个字符.可以接受的储存数据不能超过1MB,因为这是典型slab 的最大值.这里我们可以突破对key长 ...