zoukankan      html  css  js  c++  java
  • LeetCode 1595 Minimum Cost to Connect Two Groups of Points (动态规划)

    题目

    题解: 动态规划,用二进制压缩状态,注意分析几种情况,就能推出来正确的状态转移方程。

    class Solution {
    public:
        int dp[12][4096];
       int connectTwoGroups(vector<vector<int>>& cost) {
    	int n = cost.size();
    	if (n == 0)
    		return 0;
    	int m = cost[0].size();
    
    	for (int i = 0; i < n; i++)
    	{
    		for (int j = 0; j < (1 << m); j++)
    		{
    			dp[i][j] = INT32_MAX;
    			for (int k = 0; k < m; k++)
    			{
    				if (j & (1 << k))
    				{
    					if (i != 0 && dp[i - 1][j ^ (1 << k)] != INT32_MAX )
    					{
    						dp[i][j] = min(dp[i][j], dp[i - 1][j ^ (1 << k)] + cost[i][k]);
    					}
    
    					if (i != 0 && (dp[i - 1][j] != INT32_MAX))
    					{
    						dp[i][j] = min(dp[i][j], dp[i-1][j]+cost[i][k]);
    						
    					}
    
    					if (i == 0 && (j ^ (1 << k)) == 0)
    					{
    						dp[i][j] = cost[i][k];
    					}
    					else
    					{
    						if (dp[i][j ^ (1 << k)] != INT32_MAX)
    						{
    							dp[i][j] = min(dp[i][j], dp[i][j ^ (1 << k)] + cost[i][k]);
    						}
    					}
    				}
    
    			}
    		}
    	}
    
    	return dp[n - 1][(1 << m) - 1];
    
    }
    };
    
  • 相关阅读:
    正则表达式复习 (?<=) (?=)
    HTML 30分钟入门教程
    C# 多线程详解
    C# List
    C# 枚举
    C# 线程数
    C# 泛型2
    C# 泛型
    C# 结构体
    不用Google Adsense的84个赚钱方法
  • 原文地址:https://www.cnblogs.com/dacc123/p/13856962.html
Copyright © 2011-2022 走看看