c语言dp做题步骤及题(题慢慢加吧

dp

  • 做题步骤
  • leetcode相关题型
    • leetcode5.最长回文子串
    • leetcode322.零钱兑换
    • leetcode1025. 除数博弈
      • 解法1:数学式找规律
      • 解法2:dp

做题步骤

思路
1.特殊情况的考虑

2.确定dp数组所代表的含义和大小,创建dp数组

3.考虑边界条件,初始赋值dp数组

4.根据状态转移方程遍历求得dp数组


leetcode相关题型

leetcode5.最长回文子串

c语言dp做题步骤及题(题慢慢加吧_第1张图片
思路分析如下:(草纸写的乱,不过无所谓 我看得懂就成
c语言dp做题步骤及题(题慢慢加吧_第2张图片
整理思路,编写代码
这题写的过程很艰难,而且是基于学长的java代码来写的,所以不算是自己完成的。
c语言dp做题步骤及题(题慢慢加吧_第3张图片
看到提交结果的俺泪流了下来
c语言dp做题步骤及题(题慢慢加吧_第4张图片
其实也不意外,用dp的话 两个for循环,时间复杂度达到了O(n^2).


然后学习了一下那个运行时间0ms的大神的代码。

char * longestPalindrome(char * s){
    if(strlen(s)==0||strlen(s)==1) return s;//依旧是先进行特判
    int i,count,left,right;
    int len=0,start=0;
    for(i=0;s[i]!='\0';i+=count)
    {
    	count=1;
    	left=i-1;
    	right=i+1;
    	while(s[i]==s[right])
    	{
    		count++;
    		right++;
		}
    	while(left>=0&&s[left]==s[right]&&s[right]!='\0')
    	{
    		left--;
			right++;
		}
		if(right-left-1>len)
		{
			len=right-left-1;
			start=left+1;
		}
	}
	s[start+len]='\0';
	return s+start;
}

leetcode322.零钱兑换

c语言dp做题步骤及题(题慢慢加吧_第5张图片
思路
1.特殊情况的考虑
(1).示例3
if(amont==0)
return 0;
(2).判断coins为空时。
if(coins= =NULL)
return -1;
2.确定dp数组所代表的含义和大小,创建dp数组
int dp[amont+1];
dp[n]表示当前的目标金额是n,至少需要dp[n]个硬币凑出该金额
因为金额最小是0 所以dp数组大小要为amont+1
3.考虑边界条件,初始赋值dp数组
因为dp[0]=0,所以初始赋值时全赋为0
4.根据状态转移方程遍历求得dp数组
dp[n]=min(dp[n-coin]+1,dp[n])
dp[n-coin]+1背后的思想就是母问题拆分子问题。
dp[n]硬币数最小,代表dp[n-coin]硬币数最小。
图源leetcode

c语言dp做题步骤及题(题慢慢加吧_第6张图片
学长:

假设有k枚硬币:a1,a2…ak凑成了目标amount 因此存在最后一枚硬币ak,那么前面的面值加起来=amount-ak

没错吧?因此我们得到了原问题和子问题关系啦:最少用多少枚硬币拼成amount最少用多少枚硬币拼成amount-ak

c语言dp做题步骤及题(题慢慢加吧_第7张图片
(小声bb:dp不是以空间换时间咩。。哎
c语言dp做题步骤及题(题慢慢加吧_第8张图片


leetcode1025. 除数博弈

解法1:数学式找规律

这答案过于生草!
首先要理解 c语言dp做题步骤及题(题慢慢加吧_第9张图片
框框句子代表的含义 表明这俩人都很聪明啊 计划着让自己赢呢。所以 每个人先选什么,肯定是以自己要赢为前提。理解了这个才好做题。
不会就列举 列举几项就能发现问题 这个答案太。。省略!

c语言dp做题步骤及题(题慢慢加吧_第10张图片
c语言dp做题步骤及题(题慢慢加吧_第11张图片

解法2:dp

思路
1.特殊情况的考虑
N=1,return false;
N=2,return true;
2.确定dp数组所代表的含义和大小,创建dp数组
bool dp[1001];
3.考虑边界条件,初始赋值dp数组

4.根据状态转移方程遍历求得dp数组
c语言dp做题步骤及题(题慢慢加吧_第12张图片
我写的感觉很不dp…
自信点 或许这压根就不是dp?
算了不管了题做出来了就行。。

你可能感兴趣的:(写给自己看的,力扣刷题,笔记)