dp * 3
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的更多相关文章
- BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 4142 Solved: 1964[Submit][Statu ...
- 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 ...
- AEAI DP V3.7.0 发布,开源综合应用开发平台
1 升级说明 AEAI DP 3.7版本是AEAI DP一个里程碑版本,基于JDK1.7开发,在本版本中新增支持Rest服务开发机制(默认支持WebService服务开发机制),且支持WS服务.RS ...
- AEAI DP V3.6.0 升级说明,开源综合应用开发平台
AEAI DP综合应用开发平台是一款扩展开发工具,专门用于开发MIS类的Java Web应用,本次发版的AEAI DP_v3.6.0版本为AEAI DP _v3.5.0版本的升级版本,该产品现已开源并 ...
- BZOJ 1597: [Usaco2008 Mar]土地购买 [斜率优化DP]
1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4026 Solved: 1473[Submit] ...
- [斜率优化DP]【学习笔记】【更新中】
参考资料: 1.元旦集训的课件已经很好了 http://files.cnblogs.com/files/candy99/dp.pdf 2.http://www.cnblogs.com/MashiroS ...
- BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 9812 Solved: 3978[Submit][St ...
- px、dp和sp,这些单位有什么区别?
DP 这个是最常用但也最难理解的尺寸单位.它与“像素密度”密切相关,所以 首先我们解释一下什么是像素密度.假设有一部手机,屏幕的物理尺寸为1.5英寸x2英寸,屏幕分辨率为240x320,则我们可以计算 ...
- android px转换为dip/dp
/** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ public int dipTopx(Context context, float dpValue) { final floa ...
- POJ 3254. Corn Fields 状态压缩DP (入门级)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9806 Accepted: 5185 Descr ...
随机推荐
- go语言实现单链表
线性表包含两种存储方法:顺序存储结构和链式存储结构,其中顺序表的缺点是不便插入与删除数据. 单链表:每个结点包含两部分:数据域+指针域,上一个结点的指针指向下一结点,依次相连,形成链表.特别注意的是每 ...
- oracle_job进程相关学习测试
Oracle cjq0进程测试 测试流程: .CJQ进程不存在 .模拟问题处理 .问题总结 一.问题现象 CJQ0进程不存在 [root@adg1 ~]# ps -ef|grep cjq root : ...
- 怎样让ssh连接保持连接, 而不会因为没有操作而中断
因为安全方面的考虑, ssh服务默认在一段时间内不操作会断开连接, 解决方法修改ssh的配置文件, 让ssh每隔一段时间就自动进行一次连接, 以达到保持连接的目的. 首先找到ssh配置文件的位置: f ...
- ASCII,UTF-8,Unicode字符串相互转换
#include<string> #include<windows.h> #include<vector> using namespace std; //utf8 ...
- Python初识对象
一 楔子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人拿棍打狗, ...
- Django中ORM多对多表的操作
自己创建第三张表建立多对多关系 表的创建 # 老师表和学生表可以是一个多对多的关系,建表时可以手动建立第三张表建立关联 class Student(models.Model): name = mode ...
- sql server行转列
创建测试数据 学生表 Student create table Student(S# varchar(10),Sname nvarchar(10),Sage datetime,Ssex nvarcha ...
- awk 常用选项及数组的用法和模拟生产环境数据统计
awk 常用选项总结 在 awk 中使用外部的环境变量 (-v) awk -v num2="$num1" -v var1="$var" 'BEGIN{print ...
- Flutter——Drawer、DrawerHeader、UserAccountsDrawerHeader组件(侧边栏组件)
在 Scaffold 组件里面传入 drawer 参数可以定义左侧边栏,传入 endDrawer 可以定义右侧边栏.侧边栏默认是隐藏的,我们可以通过手指滑动显示侧边栏,也可以通过点击按钮显示侧边栏. ...
- python返回值的缺省设置
有时候并不需要返回所有的值,但是原始函数的return语句中又有较多参数时: 方法一:修改原始返回值,只返回需要的参数 方法二:如果原始函数时第三方库或者python自带库,则直接修改可能不太好,于是 ...