首页 > TAG信息列表 > HAOI2009

P3173 [HAOI2009]巧克力

https://www.luogu.com.cn/problem/P3173涉及知识点:贪心,排序黄色题   思路: STEP 1 条件整理 1.对一个长方形横着切n刀,竖着切m刀; 2.每一刀都要花费一定的代价; 3.如果巧克力从一个方向切了w块,那么从另一个方向切的时候就要花费w*x_ixi​的代价; 4.问最小代价是多少。 STEP 2 题

P3174 [HAOI2009] 毛毛虫

非常好的一道树形dp 我开始一直陷入了思维误区 认为最优解可能不但是从子树转移过来还可能是从父亲转移过来的 这就非常头疼了 转移方程不好写啊 但实际上直接从下向上转移就好 为什么 因为最优解 保证一定存在一个节点 最优解为该节点最大子树和次大子树之和 最为极端的情况就是

P5041 [HAOI2009]求回文串

题目链接 P5041 [HAOI2009]求回文串 题目描述 所谓回文串,就是对于给定的字符串,正着读和反着读都一样,比如ABCBA就是一个回文串,ABCAB则不是。我们的目标是对于任意输入的字符串,不断将第i个字符和第i+1个字符交换,使得该串最终变为回文串。求最少交换次数。 输入格式 一个由大写字母字

P3174 [HAOI2009]毛毛虫

Jisoo \(dp_i\)表示节点i为头的最长毛毛虫 (我这里i的父节点呗算作腿的一条) 然后就可以不用特判地进行转移 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #define int long long using namespace std; int n,m; struct ed{ int to; int ne; }ed[6

P3174 [HAOI2009]毛毛虫 题解

CSDN同步 原题链接 简要题意: 给定一棵树,求最长的 “挂链” 长度。 挂链定义为:一条链上所有节点与其相连的节点构成的生成树。(非严谨定义)(原题中是 “毛毛虫”,本人以为挂链更形象) 这题有多种做法,这里给出思路,以及其中一种做法的代码。 算法一 注意到,其实我们只需要选出 “最长链”,然

P3174 [HAOI2009]毛毛虫

P3174 [HAOI2009]毛毛虫 好题 先放一个恶俗的东西: 《The Very Hungry Caterpillar》 (有人知道吗?童年回忆啊!) 分析: 设每一个点的入度是a[i],主干路径点数为len 毛毛虫点数=∑a[i]-len+2        (i均是主干路径上的点) 考虑原因:主干路径两端端点不需要管,中间点都被多算了一次 化简

洛谷P3174 [HAOI2009]毛毛虫

树形DP,注意答案是节点数,我一直以为是边数懵逼了半个小时 #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #define maxn 300010 using namespace std; struct node { int ed,len,nxt; }; node edge[maxn<<1]; int n,m,first[maxn]

BZOJ 2431 [HAOI2009]逆序对数列 (dp)

题意 问长度为n的1~n的排列,且逆序对为k的方案数有多少 \(n,k\leq 1000\) 思路 假设前\(1\)~\(i\)已经排列好,此时逆序对为\(k\),那么我们来讨论插入\(i+1\)时候的状态 \(i+1\)根据插入位置的不同,可以产生\(0\)到\(i\)个逆序对 根据这个特点我们设\(dp[i][j]\)为前\(i\)个数,逆序对为

[HAOI2009]毛毛虫

题目描述 对于一棵树,我们可以将某条链和与该链相连的边抽出来,看上去就象成一个毛毛虫,点数越多,毛毛虫就越大。例如下图左边的树(图 1 )抽出一部分就变成了右边的一个毛毛虫了(图 2 )。 输入格式 在文本文件 worm.in 中第一行两个整数 N , M ,分别表示树中结点个数和树的边数。 接下来

【luogu3174】 [HAOI2009]毛毛虫 [动态规划 树形dp]

3174 [HAOI2009]毛毛虫  求一条链链上的节点和与链上节点相连的兄弟和最大 在链上每个节点都被多算了一次 所以初设为1 虽然还没有搞清为什么要像树的直径一样跑两遍...   #include<bits/stdc++.h>using namespace std;#define Max(x,y) (x)<(y)?(y):(x)#define Min(x,y) (x)<(