codeforces1369D TediousLee

https://codeforces.com/problemset/problem/1369/D

一眼结论,从这棵树从下往上,能取就取,肯定能得到最大值,因为儿子数量更多一些,如果取父节点会影响很多子树。

然后再考虑,i=3,只能取跟节点的1个爪子,i=4的时候,从下往上取,取中间的爪子,根节点不会被取,i=5的时候,也不会取根节点

然后可以发现 对于level i , 由3棵子树+1个根节点形成,其中2棵i-2的树,1棵i-1的树

那么如果i-2和i-1都不取根节点,也就是i的根节点的子节点,那么根节点这里就可以在子树都取完最大值的基础上多取一个爪子。

#include
using namespace std;
typedef long long ll;

const int maxl=2e6+10;
const int mod=1e9+7;

int n,m,cas,k,cnt,tot,ans;
char s[maxl];
bool in[maxl]; 
ll dp[maxl];

inline void prework()
{
	scanf("%d",&n);
} 

inline void mainwork()
{
	
}

inline void print()
{
	printf("%lld\n",4*dp[n]%mod);
}

int main()
{
	dp[1]=0;dp[2]=0;dp[3]=1;
	for(int i=4;i

 

你可能感兴趣的:(递推)