P4395 [BOI2003]Gem 气垫车

树形dp

首先,我们可以考虑dp,把这个问题看成一个树的染色问题,用dp[i][j]表示以i为根节点,将树染成第i种颜色的最小代价,那么我们可以得到j的最大值是(log(maxn)/log(2)+1)=15,所以循环次数我们开到15就可以了,然后是常规初始化和dp,这里dfs是遍历整棵树寻找答案.

for(int i = 1; i <= 15; i++)
     for(int j = 1; j<= 15; j++)
        if(i != j)
            mn = min(mn,dp[v][j])
      dp[u][i] += mn

 数据在2020.5.16日考试t1

猜你喜欢

转载自www.cnblogs.com/caterpillor/p/12917171.html