Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python解决方案与C++;leetcode1039的解决方案_Python_C++_Dynamic Programming - Fatal编程技术网

Python解决方案与C++;leetcode1039的解决方案

Python解决方案与C++;leetcode1039的解决方案,python,c++,dynamic-programming,Python,C++,Dynamic Programming,我已经用python编写了一段代码 class Solution(object): def minScoreTriangulation(self, A): self.dp = [[-1]*len(A)]*len(A) ret = self.calc(A, 0, len(A)-1) return ret def calc(self, A, x, y): if math.ceil(y-x) < 2:

我已经用python编写了一段代码

class Solution(object):
    def minScoreTriangulation(self, A):
        self.dp = [[-1]*len(A)]*len(A)
        ret = self.calc(A, 0, len(A)-1)
        return ret

    def calc(self, A, x, y):
        if math.ceil(y-x) < 2:
            return 0

        if self.dp[x][y] != -1:
            return self.dp[x][y]

        mn = sys.maxint
        for i in range(x+1, y):
            mn = min(mn, (self.calc(A, x, i) + self.calc(A, i, y) + A[x]*A[y]*A[i]))

        self.dp[x][y] = mn
        return mn
类解决方案(对象):
def Minscore三角测量(自,A):
self.dp=[-1]*len(A)]*len(A)
ret=自计算(A,0,len(A)-1)
回程网
def计算(自身、A、x、y):
如果数学单元(y-x)<2:
返回0
如果self.dp[x][y]!=-1:
返回self.dp[x][y]
mn=sys.maxint
对于范围内的i(x+1,y):
mn=min(mn,(自计算(A,x,i)+自计算(A,i,y)+A[x]*A[y]*A[i]))
self.dp[x][y]=mn
返回mn

我也编写了一个C++的解决方案,同样的逻辑。

class Solution {
public:
    int minScoreTriangulation(vector<int>& A) {
        vector<int> row(A.size(), -1);
        vector<vector<int>> dp(A.size(), row);

        int ret =calc(dp, A, 0, A.size()-1);

        return ret;
    }

    int calc(vector<vector<int>>& dp, vector<int>& A, int x, int y)
    {
        if ((y-x) < 2)
            return 0;

        if(dp[x][y] != -1) return dp[x][y];

        int mn = INT_MAX;

        for( int i=x+1; i<y ; i++)
        {
            mn = min(mn, calc(dp, A, x, i)+calc(dp, A, i, y)+A[x]*A[y]*A[i]);
        }
        dp[x][y] =mn;
        return mn;
    }
};
类解决方案{
公众:
int-Minscore三角测量(矢量和A){
向量行(A.size(),-1);
向量dp(A.大小(),行);
int ret=计算(dp,A,0,A.大小()-1);
返回ret;
}
整数计算(矢量和dp、矢量和A、整数x、整数y)
{
如果((y-x)<2)
返回0;
如果(dp[x][y]!=-1)返回dp[x][y];
int mn=int_MAX;

对于(inti=x+1;i而言,问题在于这一行:

self.dp = [[-1]*len(A)]*len(A)
在python中,不能使用这种方式初始化2d数组,因为它将引用相同的
[-1]*len(a)
,更改为:

self.dp = [[-1]*len(A) for i in range(len(A))]

它可以正常工作。

问题在于这行:

self.dp = [[-1]*len(A)]*len(A)
在python中,不能使用这种方式初始化2d数组,因为它将引用相同的
[-1]*len(a)
,更改为:

self.dp = [[-1]*len(A) for i in range(len(A))]

它可以很好地工作。

欢迎使用堆栈溢出!听起来您可能需要学习如何使用a来逐步完成代码。有了一个好的调试器,您可以逐行执行程序,并查看它与预期的偏差。如果您要进行任何编程,这是一个必不可少的工具。进一步阅读:。您可能会在错误的堆栈交换,你应该去那里@BlueSheepToken这绝对不是关于代码审查的主题。@Peilonrayz我的错,我想是的。为什么不应该呢?应该在哪个堆栈交换上?(当然也不是这样)@BlueSheepToken“”。我只知道代码检查的规则,因此无法在其他网站上发表评论。欢迎使用堆栈溢出!听起来您可能需要学习如何使用a逐步检查代码。有了一个好的调试器,您可以逐行执行程序,并查看程序偏离预期的地方。如果您要执行一个任务,这是一个必不可少的工具y编程。进一步阅读:。您可能在错误的堆栈交换上,您应该去那里@BlueSheepToken这绝对不是关于代码审查的主题。@Peilonrayz我的错,我想是的。为什么不应该呢?它应该在哪个堆栈交换上?(也绝对不是这样)@BlueSheepToken“”.我只知道代码审查的规则,所以不能在其他网站上发表评论。