hdu 5534
题目描述:n个节点度数之和为n-2,每个节点预分配了1个度,任意分配度数是否有可能形成树?
从1到n节点,考虑树的形状,考虑分配给当前节点i的度数,并且注意到当前节点的度数不会影响其他节点(之前或者之后),因为之前先给每个节点分配1度的度数,然后n个节点度数之和确定,从1到n考虑,每个节点都有分配到0到n-2的度数的可能,还有n个节点的度数之和的为n-2的限制(某个节点分配到0个度,说明是叶子)。
求在y1+y2+.....+y[n-2]=(n-2)的条件下,F[y1]+F[y2]+.....F[y[n-2]]的最大收益;
其中xi代表i度的有几个,f[i]代表i度的收益;
将n-2个度分为n份,可以想象一条长度为n-2的线段,切成n段,获得的收益为F[len],求收益最大?每段的长度的取值范围为0到n-2,那么可以这样考虑,最优情况下,一厘米长度的有几个?2厘米长度的有几个?3厘米长度的有几个?......n-2厘米长度的有几个?
数学形式为在x1+x2+....+x[n-2]=(n-2)的条件下,求x1*f[1]+x2*f[x2]+...x[n-2]*f[n-2]的最大值?
其次还需处理线段长度合并时权值的变化,消除的思想。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#define maxn 2200
#define inf 0x3f3f3f3f3f3f
using namespace std;
int T,n,f[maxn]; //f代表石子的重量
int d[maxn];
int f1;
void init()
{
for(int i=;i<maxn;i++)
d[i]=-inf;
d[]=;
}
void solve() //可以理解成切线段
{
int ans=n*f1;
for(int i=;i<=n-;i++) //度数为i的有多少个
{
for(int j=i;j<=n-;j++)
{
if(d[j-i]+f[i] > d[j] )
{
d[j]=d[j-i]+f[i];
}
}
}
ans+=d[n-];
printf("%d\n",ans);
} int main()
{
// freopen("test.txt","r",stdin);
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
scanf("%d",&f1);
for(int i=;i<=n-;i++)
{
scanf("%d",&f[i]);
f[i]-=f1;
}
init();
solve();
}
return ;
}
hdu 5534的更多相关文章
- H - Partial Tree HDU - 5534 (背包)
题目链接: H - Partial Tree HDU - 5534 题目大意:首先是T组测试样例,然后n个点,然后给你度数分别为(1~n-1)对应的不同的权值,然后问你在这些点形成树的前提下的所能形 ...
- HDU 5534 Partial Tree (完全背包变形)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5534 题意: 给你度为1 ~ n - 1节点的权值,让你构造一棵树,使其权值和最大. 思路: 一棵树上 ...
- hdu 5534 Partial Tree 背包DP
Partial Tree Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid= ...
- ACM学习历程—HDU 5534 Partial Tree(动态规划)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5534 题目大意是给了n个结点,让后让构成一个树,假设每个节点的度为r1, r2, ...rn,求f(x ...
- hdu 5534 Partial Tree(完全背包)
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5534 题解:这题一看有点像树形dp但是树形dp显然没什么思路.然后由于这里的约束几乎没有就 ...
- 2015ICPC chanchun HDU 5534 (树形题转换完全背包)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5534 题意:给你n个点,让你加上n-1条边使他变成一棵树,题目首先给你a[1] a[2].....a[n- ...
- HDU 5534 Partial Tree 完全背包
一棵树一共有2*(n-1)度,现在的任务就是将这些度分配到n个节点,使这n个节点的权值和最大. 思路:因为这是一棵树,所以每个节点的度数都是大于1的,所以事先给每个节点分配一度,答案 ans=f[1] ...
- hdu 5534 (完全背包) Partial Tree
题目:这里 题意: 感觉并不能表达清楚题意,所以 Problem Description In mathematics, and more specifically in graph theory, ...
- 2015ACM/ICPC亚洲区长春站 H hdu 5534 Partial Tree
Partial Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)To ...
- 2015长春 HDU 5534 Partial Tree
题意:有n个结点,n-1条边,现在要把这n个结点连成一棵树,给定了f(i),表示度为i的结点的价值是f(i).现在问如何连能够使得Σf(i)的值最大. 思路:每个点至少一个度,所以可分配的度数为n-2 ...
随机推荐
- [CTSC2007]数据备份Backup 题解
题意: 一维直线上有n个点,任取2k个互不相同的点组成k条链,求链的最小总长 思路: 1.最优时链不相交,相邻两两相减,将题目转化为:在n-1个数中取互不相邻的k个数使总和最小. 2.贪心取最小的“数 ...
- POJ 2420 A Star not a Tree?【爬山法】
题目大意:在二维平面上找出一个点,使它到所有给定点的距离和最小,距离定义为欧氏距离,求这个最小的距离和是多少(结果需要四舍五入)? 思路:如果不能加点,问所有点距离和的最小值那就是经典的MST,如果只 ...
- ubuntu使用git的时:Warning: Permanently added the RSA host key for IP address '13.250.177.223' to the list of known hosts.
1:问题现象: hlp@hlp:~/code/github_code/catch_imooc1$ git push origin master Warning: Permanently added t ...
- [转]genymotion Unable to load VirtualBox engine 某种解决办法
genymotion Unable to load VirtualBox engine 某种解决办法 耳闻genymotion这款模拟器很强力.于是下下来试试看.我的机器上是有virtualbox的了 ...
- [codeVS1204] 单词背诵
题目描述 灵梦有n个单词想要背,但她想通过一篇文章中的一段来记住这些单词. 文章由m个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的只算一个).并且在背诵的单词量尽量多的情 ...
- 背包DP 整理
题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. 基本思路 这是最基础的背包问题,特点是: ...
- CodeForces 597A Divisibility
水题. #include<iostream> #include<cstring> #include<cmath> #include<queue> #in ...
- js删除数组对象中符合条件的数据
var data = [{}, {}, {}, {Id:1}] var datawilldele = [];//2,4,5 data.forEach(function (v, i,arry) { if ...
- POJ 3254 【状态压缩DP】
题意: 给一块n*m的田地,1代表肥沃,0代表贫瘠. 现在要求在肥沃的土地上种草,要求任何两个草都不能相邻. 问一共有多少种种草的方法. 种0棵草也是其中的一种方法. n和m都不大于12. 思路: 状 ...
- Codeforces Round Edu 36
A.B.C 略 D(dfs+强连通分量) 题意: 给出一个n(n<=500)点m(m<=100000)边的有向图,问能否通过删去一条边使得该图无环. 分析: 最简单的想法就是枚举一条边删去 ...