最近比赛中遇到的几道dp题
1、2015 icpc 长春-H-Partial Tree(据说是完全背包,但我觉得不像)
一、题意
给定$n$个点,每一个点$i$的权值为关于度数$d_i$的函数$f(d_i),$让你构建一棵树,使得这棵树的总度数和最大。
二、思路
前提结论:任意一个累加和为$2*(n-1)$的不含$0$元素的序列,将其表示成点的度数,都一定可以组成一棵树。
一棵$n-1$条边的树,有$2*(n-1)$个度。先给每个点分一个度,还剩$n-2$个度。剩下来就是整数划分了。$g[i]$表示把数字$i$划分成若干部分所能得到的最大度函数和。那么,容易得到递推式:$g[i]=max\{g[k]+f(i-k+1)-f(1)|0 \le k < i\}$。初始化$g$数组为$-\infty$,初始状态$g[0]=0$。最终答案就是$g[n-2]+n*f(1)$。
解释一下递推式的含义:把$i$个糖果分成若干份所能得到的最大度函数和,等于把$k$个糖果分成若干份,然后剩余的$i-k$份变成一份。要注意的是,转移的代价不是$f(i-k)$,而是$f(i-k+1)$,意思是:当给某个点(我也不知道前面已经分成几份了)$i-k$个“糖果”时,它实际上有的糖果是$i-k+1$个,因为一开始给它分了$1$个。但是又不能只加$f(i-k+1)$,因为还要减去最后加的$n*f(1)$份中的$1*f(1)$份。换句话说,为什么要减这部分,主要是我们并不清楚$n-2$个糖果到底分成了几份,如果转移的时候只加$f(i-k+1)$,那最后不知道要加多少倍$f(1)$,所以,这不好弄。就只能在转移的时候减了。
三、代码
#include<bits/stdc++.h>
using namespace std;
], g[];
int main() {
// freopen("h.in","r",stdin);
int T;
for(scanf("%d", &T); T--;) {
scanf("%d", &n);
; i < n; ++i)scanf("%d", f + i);
memset(g, ])*n);
g[] = ;
; i <= n - ; ++i) {
; j <= i; ++j) {
g[i] = max(g[i], g[j] + f[i - j + ] - f[]);
}
}
printf(] + n * f[]);
}
;
}
2、2017 ccpc final-G-Alice’s Stamps(像个01背包)
3、2018 icpc 焦作网络赛-运输船(裸的多重背包)
https://www.cnblogs.com/565261641-fzh/p/9652143.html
4、安装App(01背包,记录路径)
https://www.cnblogs.com/565261641-fzh/p/9651977.html
最近比赛中遇到的几道dp题的更多相关文章
- poj 50道dp题
1.poj 3267 题意:给你一个字符串,下面有若干单词,问字符串要变成由下面单词组成的字符串,至少要删除多少个字母...... 例如: 6 10 browndcodw cow milk whit ...
- 三十道DP练习(持续更新)(pw:DP)
前言: 话说DP这种纯考思维的题目,总是让我很伤脑筋,一些特别简单的DP我都常常做不出来,所以革命从现在(2018-05-01)开始,努力多刷点DP的练习-. 1.顺序对齐(align) 时间:201 ...
- 新手数据比赛中数据处理方法小结(python)
第一次参加,天池大数据竞赛(血糖预测),初赛排名1%.因为自己对python不熟悉,所以记录一下在比赛中用到的一些python方法的使用(比较基础细节,大佬绕道): 1.数据初探 data.info( ...
- 【CTF 攻略】CTF比赛中关于zip的总结
[CTF 攻略]CTF比赛中关于zip的总结 分享到: --> 本文首发于安全客,建议到原地址阅读,地址:http://bobao.360.cn/ctf/detail/203.html 前言 ...
- java:比赛中常用方法整理——字符串(基础)
一.将字符串转化为字符数组: toCharArray返回一个字符数组. char[] a=J.toCharArray(); 二.字符串的长度 字符串的长度和字符数组的长度是不一'样'的. 字符串长度( ...
- 在CSDN博客中添加量子恒道统计功能的做法
作者:朱金灿 来源:http://blog.csdn.net/clever101 什么是量子恒道统计?量子恒道统计是一套免费的网站流量统计分析系统.致力于为所有个人站长.个人博主.所有网站管理者.第三 ...
- NOIP比赛中如何加速c++的输入输出
NOIP比赛中如何加速c++的输入输出 在竞赛中,遇到大数据时,往往需要更快的读取方式.由于比赛中输出一般规模较小,本文只讨论输入如何加速. 现在我们生成1000000个随机数,构成1000*1000 ...
- 【转】POJ百道水题列表
以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight ...
- [DP题]最长上升子序列
最长上升子序列 总时间限制:2000ms 内存限制:65536kB 描述 一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是上升的.对于给定的一个序列( ...
随机推荐
- axios 拦截 , 页面跳转, token 验证
第一步: 路由 多添加一个自定义字段 requireAuth path: '/repository', name: 'repository', meta: { requireAuth: true, / ...
- PTA 大炮打蚊子 (15分)
现在,我们用大炮来打蚊子:蚊子分布在一个M×NM\times NM×N格的二维平面上,每只蚊子占据一格.向该平面的任意位置发射炮弹,炮弹的杀伤范围如下示意: O OXO O 其中,X为炮弹落点中心,O ...
- STM32中TIMx的映射及其通道
TIMx,通道x,无映射,部分映射,完全映射 TIM1_CH1, PA8, PE9, TIM1_CH2, PA9, PE11 TIM1_CH3, PA10, PE1 ...
- stm32 内部温度传感器的配置
STM32的内部温度传感器和ADCx—IN16输入通道相连接.且温度传感器推荐采样时间为17.1us,支持的温度范围为:-40~125度,精度比较差,± 5℃左右. 计算温度值:T(℃) ={(V25 ...
- ubuntu git生成ssh key (公钥私钥)配置github或者码云
Git是分布式的代码管理工具,远程的代码管理是基于SSH的,所以要使用远程的Git则需要SSH的配置. github的SSH配置如下: 设置Git的user name和email: git confi ...
- MySQL主从复制报错及解决方法
mysql> show slave status \G *************************** 1. row *************************** Slave_ ...
- OJ链接
BNU..好难找..http://www.bnuoj.com
- 网卡驱动_WDS
参考 cs89x0.c 1.网卡驱动程序与网络驱动程序的区别网卡驱动程序:网络驱动程序中最底层的驱动,主要工作:把上面发下来的数据发送出去,收到数据后构造一个包抛给上层.有收发能力就可以了. 2.网卡 ...
- StreamSets SDC RPC Pipelines说明
主要目的是进行跨pipeline 数据的通信,而不仅仅是内部pipeline 的通信,之间不同网络进行通信 一个参考图 pipeline 类型 origin destination 部署架构 使用多个 ...
- ORA-01791: not a SELECTed expression
Student表有3个字段:id,name,age 看这两个SQL语句 (1)select name from student order by id; (2)select distinct(name ...