最近比赛中遇到的几道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的时候,我们称这个序列是上升的.对于给定的一个序列( ...
随机推荐
- [Spring Boot] Spring Boot启动过程源码分析
关于Spring Boot,已经有很多介绍其如何使用的文章了,本文从源代码(基于Spring-boot 1.5.6)的角度来看看Spring Boot的启动过程到底是怎么样的,为何以往纷繁复杂的配置到 ...
- L2-003. 月饼(贪心)
L2-003. 月饼 简单的结构体和排序应用题 #include<iostream> #include<stdio.h> #include<algorithm> u ...
- [leetcode] 230. Kth Smallest Element in a BST 找出二叉搜索树中的第k小的元素
题目大意 https://leetcode.com/problems/kth-smallest-element-in-a-bst/description/ 230. Kth Smallest Elem ...
- [python]自问自答:python -m参数? (转) ( python2.7 版本 )
原文地址: http://www.cnblogs.com/xueweihan/p/5118222.html python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当 ...
- PR5
修改字幕的两种方式
- web 常用网址及资源
一.web教程 w3school在线教程 菜鸟教程 二.学习路线 2017前端学习路线图,内附完整前端自学视频教程+工具经验-黑马程序员技术交流社区 三.工具 盘搜 百度地图 查物流 金山词霸 必应词 ...
- django中的FBV和CBV
django中请求处理方式有2种:FBV 和 CBV 一.FBV FBV(function base views) 就是在视图里使用函数处理请求. 看代码: urls.py from django.c ...
- Java的历史和大事记
Java的历史 在上世纪90 年代初,sun 公司有一个叫做Green 的项目,目的是为家用消费电子产品开发一个分布式代码系统,这样就可以对家用电器进行控制,和它们进行信息交流.詹姆斯·高斯林(Jam ...
- ruby hash 默认值的问题
参考:http://stackoverflow.com/questions/16159370/ruby-hash-default-value-behavior 使用ruby hash 默认值为空数组, ...
- 01.ubuntu14.04安装HI3518EV200 SDK的过程
转载,侵删 1.海思SDK安装编译 Hi3518EV200_SDK是基于Hi3518EV200_DMEB的软件开发包,包含了在Linux相关应用开发时使用的各种工具及其源代码,是用户开发中最基本的软件 ...