0-1背包问题+Leetcode[132] python实现

0-1背包问题+Leetcode[132] python实现

  • 0-1背包问题
    • 题目
    • 分析
    • 代码
  • Leetcode (132)
    • 题目
    • 分析
    • 代码
    • 学习总结

0-1背包问题

题目

有 N 件物品和一个承重为 C 的背包(也可定义为体积),每件物品的重量是 wi,价值是 pi,求解将哪几件物品装入背包可使这些物品在重量总和不超过 C 的情况下价值总和最大。这个问题隐含了一个条件,每个物品只有一件,也就是限定每件物品只能选择 0 个或 1 个,因此又被称为 0-1 背包问题。

分析

若采用遍历的方法,将所有情况都计算出来,再找最优解,但是很耗费时间我们都知道,可以把此前遍历时已经计算过的量储存起来,当我们需要的时候直接提取它的结果,就起到了减少计算量的效果,我们的动态规划使用的就是这种思想。

此前对动态规划思想了解甚少,此次借阅了其他同学的思想,此后有时间多多钻研。

代码

def max(m,n):
    if(m>n):
        return m
    if(mn):
        return false
def best(m,list1,list2,n):
    r=[[0 for i in range(n)] for i in range(m+1)];
    for i in range(m+1):
        for j in range(n):
            r[i][j]=0
    for i in range(1,m+1):
        for j in range(1,n):
            r[i][j] = r[i][j-1]
            if(i>=list1[j]):
                r[i][j]=max(r[i][j-1],r[i-list1[j]][j-1]+list2[j])
    return r[m][n-1];
if __name__ =="__main__":
    m= 0;
    print"请输入最大重量"
    m = input()
    print"请输入一组物品的总数量"
    n=input()
    n=n+1
    list1 = [0 for i in range(n)]
    list2 = [0 for i in range(n)]
    print"请依次输入物品的质量"
    for i in range(1, n):
        list1[i] = int(input())
    print"请依次输入物品的价值"
    for i in range(1, n):
        list2[i] = int(input())
        list3[i]=0
    q=best(m,list1,list2,n)
    print q

Leetcode (132)

题目

给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。

返回符合要求的最少分割次数。

分析

代码

class Solution(object):
    def minCut(self, s):
        """
        :type s: str
        :rtype: int
        """
        dp=[0 for i in range(len(s)+1)]
        p=[[False for i in range(len(s))] for j in range(len(s))]
        for i in range(len(s)+1):
            dp[i]=len(s)-i
        for i in reversed(range(len(s))):
            for j in range(i,len(s)):
                if s[i]==s[j] and (j-i<2 or p[i+1][j-1]==True):
                    p[i][j]=True
                    dp[i]=min(dp[i],dp[j+1]+1)
        return dp[0]-1

学习总结

一周的编程集训,让自己了解了许多数据结构和算法,部分是以前上课学过,在python进行了实现,也有部分是从未接触过,全新的知识。收获很大,这种互相监督+自我督促的模式真的很nice,可惜恰逢期末考,所以投入的时间极其有限,自己做的不够好。

你可能感兴趣的:(datawhale)