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题的更多相关文章

  1. poj 50道dp题

    1.poj  3267 题意:给你一个字符串,下面有若干单词,问字符串要变成由下面单词组成的字符串,至少要删除多少个字母...... 例如: 6 10 browndcodw cow milk whit ...

  2. 三十道DP练习(持续更新)(pw:DP)

    前言: 话说DP这种纯考思维的题目,总是让我很伤脑筋,一些特别简单的DP我都常常做不出来,所以革命从现在(2018-05-01)开始,努力多刷点DP的练习-. 1.顺序对齐(align) 时间:201 ...

  3. 新手数据比赛中数据处理方法小结(python)

    第一次参加,天池大数据竞赛(血糖预测),初赛排名1%.因为自己对python不熟悉,所以记录一下在比赛中用到的一些python方法的使用(比较基础细节,大佬绕道): 1.数据初探 data.info( ...

  4. 【CTF 攻略】CTF比赛中关于zip的总结

    [CTF 攻略]CTF比赛中关于zip的总结   分享到: --> 本文首发于安全客,建议到原地址阅读,地址:http://bobao.360.cn/ctf/detail/203.html 前言 ...

  5. java:比赛中常用方法整理——字符串(基础)

    一.将字符串转化为字符数组: toCharArray返回一个字符数组. char[] a=J.toCharArray(); 二.字符串的长度 字符串的长度和字符数组的长度是不一'样'的. 字符串长度( ...

  6. 在CSDN博客中添加量子恒道统计功能的做法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 什么是量子恒道统计?量子恒道统计是一套免费的网站流量统计分析系统.致力于为所有个人站长.个人博主.所有网站管理者.第三 ...

  7. NOIP比赛中如何加速c++的输入输出

    NOIP比赛中如何加速c++的输入输出 在竞赛中,遇到大数据时,往往需要更快的读取方式.由于比赛中输出一般规模较小,本文只讨论输入如何加速. 现在我们生成1000000个随机数,构成1000*1000 ...

  8. 【转】POJ百道水题列表

    以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight ...

  9. [DP题]最长上升子序列

    最长上升子序列 总时间限制:2000ms 内存限制:65536kB 描述 一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是上升的.对于给定的一个序列( ...

随机推荐

  1. ACCESS删除datagridview和数据库中的一条数据,同时更新显示的方法源码

    //删除,行删除 private void 删除_Click(object sender, EventArgs e) { int dgrcount = dataGridView1.SelectedRo ...

  2. myeclipse 与 webstrom 免解析node_modules 的方法

    myeclipse :   1.项目文件夹上:右键  properites  - > 搜索 filter  -->resouce filters 2.  webStrom : File - ...

  3. OC基础:NSString NSNumber 分类: ios学习 OC 2015-06-17 17:55 77人阅读 评论(0) 收藏

    OC中的基本数据类型 NSString  在64位系统下,相当于long,在非64位系统下,想当于int. CGFloat   在64位系统下,相当于double,在非64位系统之下,想当与float ...

  4. ASCII编码和Unicode编码的区别

    链接: 计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了.Unicode标准也在不断发展,但最常用的是用两个字 ...

  5. led不同颜色的驱动电压和驱动电流

    LED耗电非常低,一般来说LED的工作电压是2-3.6V,其中红光电压是1.8-2.1V 波长610-620    绿光电压是3.0-3.5V 波长520-530   兰光电压是3.0-3.5V 波长 ...

  6. JQuery 基本知识,选择器,事件,DOM操作

    一.基本知识 Jquery是什么? 它就是一套JS方法包,jQuery是一个快速,小巧,功能丰富的JavaScript库.它使得HTML文档遍历和操作,事件处理,动画和Ajax更容易使用易于使用的AP ...

  7. .NET 中使用 Mutex 进行跨越进程边界的同步

    Mutex 是 Mutual Exclusion 的缩写,是互斥锁,用于防止两个线程同时对计算机上的同一个资源进行访问.不过相比于其他互斥的方式,Mutex 能够跨越线程边界. 本文内容 Mutex ...

  8. linux环境下编译php扩展

    1.使用ext_skel工具生成扩展框架 ./ext_skel --extname=myext 2.编辑config.m4文件 cd myext/vim config.m4 去掉以下内容的注释: PH ...

  9. 对比dfs与bfs的存储机制以及bfs与队列的关系

    dfs由于是利用递归进行遍历,所以每种情况在时空上不会出现冲突,所以可以利用数组将每种情况的各个元素的值进行存储(即存储当前位) 而bfs由于并不是利用递归,不能将每种情况的值进行不冲突地存储,但由于 ...

  10. SocketIO4Net.Client

    Project Description SocketIO4Net.Client Update as of 11/02/2013 A develop branch is up at https://gi ...