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. ifstream 和 ofstream 用法。

    outfile << pContent;//不可以用这个,因为不能写完全,比如遇到字符串中出现/0就终止了 bool CTestEn_DecryptDLLDlg::WriteDataFil ...

  2. Springboot项目使用aop切面保存详细日志到ELK日志平台

    上一篇讲过了将Springboot项目中logback日志插入到ELK日志平台,它只是个示例.这一篇来看一下实际使用中,我们应该怎样通过aop切面,拦截所有请求日志插入到ELK日志系统.同时,由于往往 ...

  3. grep命令与正则表达式

    搜寻特定字符串the 常用参数:-a 将binary档案以test档案的方式搜寻数据    -c  计算找到'搜寻字符串'的次数    -i 忽略大小写的不同  -n  顺便输出行号  -v  反向选 ...

  4. android系列9.LinearLayout学习

    <!-- <LinearLayout> 线性版面配置,在这个标签中,所有元件都是按由上到下的排队排成的 --> <LinearLayout xmlns:android=& ...

  5. [LeetCode&Python] Problem 908. Smallest Range I

    Given an array A of integers, for each integer A[i] we may choose any x with -K <= x <= K, and ...

  6. 隐藏微信小程序剪贴板提示

    wx.setClipboardData 剪贴内容老是有一个Toast提示,很不爽,如何隐藏? 只要你代码写得够快,提示都追不上你. wx.setClipboardData({ data: '女朋友了? ...

  7. Largest Submatrix of All 1’s

    Given a m-by-n (0,1)-matrix, of all its submatrices of all 1’s which is the largest? By largest we m ...

  8. jquery,从后台查数据,给页面上添加树形。

    前台jquery+ajax请求往页面上添加树形的js代码 //传入当前点击节点的id,在后台代码查询出parentid=当前节点id的记录数,从而实现点击当前节点,往后台发送ajax请求,查询出子节点 ...

  9. 利用GPU改善程序性能的一点心得

    1.     硬件方面 a. 流处理器个数    Gpu内部的计算单元个数,决定分析模块实时性的关键因素.    实测效果: gtx760  1152个 Gtx960  1024个 单路1080p运动 ...

  10. PostgREST docker-compose 试用

    PostgREST 是一款很不错的直接将pg 数据库暴露为restapi ,使用了基于行级别安全访问控制, 比较全的restapi 查询以及集成了swagger openapi docker-comp ...