
动态规划
dtwd886
这个作者很懒,什么都没留下…
展开
-
leetcode139——单词拆分(动态规划)
题目链接:https://leetcode-cn.com/problems/word-break/首先考虑到unordered_set是基于哈希表实现的,查询的时间复杂度为O(1)所以首先将wordDict中每个单词存到set中将dp[0]初始化为true;对于dp[i]可以考虑分解为两部分,dp[j]&&check(s[j...i-1])(0<=j<=i-1)check即是根据unordered_set来判断是否有等于s[j...i-1]的单词。cla原创 2020-06-26 15:26:23 · 377 阅读 · 0 评论 -
leetcode837——动态规划
获胜的概率只和下一轮开始前的得分有关,因此根据得分计算概率。令dp[x]表示从x开始游戏并获胜的概率,目的是求dp[0]的值。情况1:当K<=x<=Min(N,K-1+W)时dp[x]=1。当x>=Min(N,K-1+W)时dp[x]=0;情况2:当x<Kdp[x]=直观的动态规划解法:class Solution {public: double new21Game(int N, int K, int W) {原创 2020-06-03 15:37:30 · 182 阅读 · 0 评论 -
leetcode——1139 最大的以1为边界的正方形
动态规划变形题。题目链接:https://leetcode-cn.com/problems/largest-1-bordered-square/1.只需考虑创建一个三维数组,dp[i][j][0]用以维护以i,j为终止点的左连续1的个数,dp[i][j][1]用以维护以i,j为终止点的上连续1的个数。2.得到两者较小值d后,将其与dp[i][j-d][0]和dp[i-d][j][1]进行比较,如果d+1大于其中任何一个,则将d--.3.最后取result和d+1较class Sol原创 2020-05-24 16:17:11 · 173 阅读 · 0 评论 -
leetcode——5419 两个子序列的最大公共子集
题目链接:https://leetcode-cn.com/problems/max-dot-product-of-two-subsequences/动态规划模板题,但是需考虑集合不能为空,即任一序列至少选择一个数。对dp[len1-1][len2-1]进行是否等于0的判断,如果为0则找负值最大值,和正值最小值,返回两者的乘积之和。数据量过大不要考虑深搜,会超时,之前怎么没想到!!!class Solution {public: int maxDotProduct(vect原创 2020-05-24 14:50:49 · 324 阅读 · 0 评论 -
杭电2577
这题先要开两个数组,分别保存开灯和关灯时打印第i个字母所需的最小步骤。当第i个字母为小写字母时a[i]=min(a[i-1]+1,b[i-1]+2):本来就为关灯时,只需按下该字母,本来为开灯时,需要关灯后按下字母。b[i]=min(a[i-1]+2,b[i-1]+2):本来为关灯时,需按下字母后开灯,本来为开灯时,需按下shift+字母键(比关灯,按下字母键,开灯步骤少)。原创 2016-04-06 20:51:03 · 294 阅读 · 0 评论 -
杭电1260
DP!!!数组模拟就好啦,分部,别再忘啦#include #include #include using namespace std;#define inf 1<<29int N,K;int TimeNeed[2100];int TimeNeigh[2100];int Min;int main(){ int i,j; int h,m,s; scanf("%d",&原创 2016-05-18 21:38:37 · 284 阅读 · 0 评论 -
杭电2845
#include #include #include using namespace std;int dp[200002];int num[200002];int x[200002];int main(){ int M,N,i,j; while(~scanf("%d%d",&M,&N)) { memset(dp,0,sizeof(dp)); for(i=1;i<=M;原创 2016-08-05 15:14:11 · 259 阅读 · 0 评论 -
杭电4504
#include #include #include using namespace std;int main(){ long long i,j,A,B,t,score,n,num; long long dp[30][100]; memset(dp,0,sizeof(dp)); dp[0][0]=1; for(i=1;i<22;i++) { for(j=63原创 2016-08-05 17:05:38 · 226 阅读 · 0 评论