dp
FlashCanSavetheWorld
不想起床
展开
-
零钱兑换 II(完全背包问题)
给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。示例 1:输入: amount = 5, coins = [1, 2, 5]输出: 4解释: 有四种方式可以凑成总金额:5=55=2+2+15=2+1+1+15=1+1+1+1+1示例 2:输入: amount = 3, coins = [2]输出: 0解释: 只用面额2的硬币不能凑成总金额3。题目链接class Solution { public int change原创 2020-12-06 20:28:56 · 148 阅读 · 0 评论 -
取石子(0-1背包问题变形)
思路:用dp[i]表示,总石子数为i时最少需要拿多少次石头,最后从k到0进行判断次数在m以内的最大石头数即可题目链接#include<bits/stdc++.h>using namespace std;const int N = 105;int arr[N];int dp[3005];const int inf =0x7ffffff;int main(){ int n,m,k; cin>>n>>m>>k; for(in.原创 2020-12-06 18:51:10 · 143 阅读 · 0 评论 -
P1077 摆花
思路:该题很明显是一道dp题,用dp[i]’[j]表示第i种花放了j盆时的可能的种数,dp[i]’[j]可以由上一个状态dp[i-1]’[j]转化而来,设当第i种花填了j盆后剩下还可以填k盆能填不超过m盆(k<=m-j),即要满足dp[i]’[j+k]=dp[i-1]’[k],所以dp[m]’[n]即为最后答案#include<bits/stdc++.h>using namespace std;const int N = 105;const int mod = 1000007;.原创 2020-12-06 12:09:35 · 86 阅读 · 0 评论 -
P2758 编辑距离
设A和B是两个字符串。我们要用最少的字符操作次数,将字符串A转换为字符串B。这里所说的字符操作共有三种:1、删除一个字符;2、插入一个字符;3、将一个字符改为另一个字符;!皆为小写字母!输入格式第一行为字符串A;第二行为字符串B;字符串A和B的长度均小于2000。输出格式只有一个正整数,为最少字符操作次数。输入sfdqxbwgfdgw输出4题目链接思路:假设用f[i][j]表示将串a[1…i]转换为串b[1…j]所需的最少操作次数(最短距离)首先是边界:①i==0时,即a原创 2020-12-06 10:21:16 · 251 阅读 · 0 评论 -
区间dp
#include <iostream>using namespace std;const int N = 255;int w[N];int sum[N]={0};int dp[N][N];int inf = 0x7fffffff;int n;int Minval(){ int s[N][N]; for(int i =1;i<=n;i++) { dp[i][i]=0; s[i][i]=i; } f.原创 2020-08-05 20:28:57 · 83 阅读 · 0 评论 -
Codeforces Round #687 (Div. 2, based on Technocup 2021 Elimination Round 2)C. Bouncing Ball
Codeforces Round #687 (Div. 2, based on Technocup 2021 Elimination Round 2)C. Bouncing Ball思路:动态更新每个格子的最小值,最后查找能跳出去的几个格子的最小值即可(注意最后比较时格子长度不能短于p)#include<bits/stdc++.h>using namespace std;const int N = 1e5+5;int arr[N];int dp[N];void solve(){原创 2020-12-01 16:03:08 · 119 阅读 · 0 评论