![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
鸭锁骨啦啦啦
你说贪心是无法接近你的
~~~~
展开
-
算法提高 能量项链
问题描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链。在项链上有N颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是Mars人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。如果前一颗能量珠的头标记为m,尾标记为r,...原创 2019-01-25 17:39:41 · 160 阅读 · 0 评论 -
踩方格
一开始推得转移方程少算了情况 #include<iostream> using namespace std; int main() { int n,l[100],r[100],b[100]; cin>>n; l[1]=1;r[1]=1;b[1]=1; //l[i]表示第i步向左到达目的地,则i-1步不可能是向右 for(int i=2;i<=n;i++)...转载 2019-07-13 09:02:46 · 84 阅读 · 0 评论 -
开餐馆
样例输出 40 30 【题解】将问题转化成LIS(最长上升子序列) #include<iostream> #include<cmath> using namespace std; int main() { int T,n,k,v[102],p[102],f[103]; cin>>T; while(T--) { cin>>n>>...转载 2019-07-13 09:26:05 · 157 阅读 · 0 评论 -
带通配符的字符串匹配
#include<cstdio> #include<algorithm> #include<cstring> #include<iostream> using namespace std; char a[105],b[105]; int la,lb; bool f[105][105]; int main() { int i,j,k; scanf...转载 2019-07-13 11:30:41 · 399 阅读 · 0 评论 -
数的划分
能不能有0转载 2019-07-11 10:49:05 · 94 阅读 · 0 评论 -
P1021 邮票面值设计
https://www.luogu.org/problemnew/show/P1021 #include<iostream> #include<cstdio> #include<cmath> using namespace std; int a[17],n,k,ans[17],maxn; int dp(int t,int mx) { int f[50000]...转载 2019-07-11 10:05:59 · 405 阅读 · 0 评论 -
地鼠游戏
#include<cstdio> #include<algorithm> using namespace std; #define N 150 int n,f[N],ans; struct node{ int fen,t; bool operator < (const node &b)const{return t<b.t; } }a[N]; i...转载 2019-07-18 10:08:44 · 113 阅读 · 0 评论 -
最大子矩阵
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define maxx 2147483647 int dp[1000][1000],f[100000]; int main() { int n,ans=-maxx; scanf("%d",&n);...转载 2019-07-11 20:19:07 · 87 阅读 · 0 评论 -
公共子序列
#include<iostream> #include<cstring> #include<algorithm> using namespace std; int main() { char p[210],q[210]; int dp[210][210]; while(cin>>p>>q) { memset(dp,0,siz...转载 2019-07-11 20:45:39 · 64 阅读 · 0 评论 -
1996:登山
#include<iostream> #include<algorithm> #include<cstdio> using namespace std; int num[1010]; int maxi[1010]; int maxi2[1010]; int main() { int n; cin>>n; for(int i=1;i<=...转载 2019-07-11 21:10:32 · 134 阅读 · 0 评论 -
算法训练 结点选择
看过这道题,我们大概可以知道,这是一道和树有关的问题,那么我们需要考虑的就是如何去遍历树?很明显,我们需要用到DFS。仔细读这道题,然后我们就可以得到这还需要用到动态规划,由此,我们做这道题,解题方案也就是树形动态规划了! 既然要用动态规划,构造状态转移方程是必不可少了! 对于叶子结点: dp[k][0] = 0; dp[k][1] = k点权值; 对于非叶子结点: dp[i][0] = ma...转载 2019-07-07 15:12:17 · 226 阅读 · 0 评论 -
乘积最大
区间dp很经典的题 #include<bits/stdc++.h> using namespace std; int num[50][50]; int dp[50][10]; //dp[i][k]表示从0~i之间有K个乘号的乘积最大值 //dp[i][k] = max(dp[j][k-1]*num[j+1][i])(k<=j<=i-1) int main() { in...转载 2019-07-16 15:02:57 · 126 阅读 · 0 评论 -
2985:数字组合
#include<iostream> using namespace std; int n,t; int num[25]; int fun[1000]; int main() { cin>>n>>t; for(int i=1;i<=n;i++) cin>>num[i]; fun[0]=1; //每一个只能选一次 for(int i...转载 2019-07-12 11:27:35 · 171 阅读 · 0 评论 -
统计单词个数
#include<cstdio> #include<iostream> #include<cstring> using namespace std; #define N 211 int n,p,k,s,f[N][41],len; char ss[N],tt[N],w[41][N]; void first() { memset(f,0,sizeof(f));...转载 2019-07-16 17:20:04 · 1438 阅读 · 0 评论 -
2988:计算字符串距离
#include<iostream> #include<cstring> #include<algorithm> #include<cmath> using namespace std; const int N=1000+2; int f[N][N];//a的前i个字符与b的前J个字符的距离 int main() { ios::sync_wit...转载 2019-07-12 16:44:05 · 134 阅读 · 0 评论 -
线段覆盖 2
#include<iostream> #include<algorithm> using namespace std; struct node{ int a,b,c; }line[1005]; int cmp(node x,node y) { return x.b<y.b; } int main() { int n; cin>>n...转载 2019-07-17 10:19:35 · 151 阅读 · 0 评论 -
矩阵取数游戏
高精度+区间dp #include<stdio.h> #include<string.h> using namespace std; int n,m,a[81]; int f[81][81][31]; int ys[81][31]; int ans[31]; int c[31]; void mul(int x[],int y[],int z){//x=y*z高精度乘法 ...转载 2019-07-17 11:50:42 · 182 阅读 · 0 评论 -
能量项链
#include<iostream> #include<cstring> #include<cmath> using namespace std; int n,m,ans; int a[220]; int dp[220][220]; int main() { cin>>m; for(int i=1;i<=m;i++) { ci...转载 2019-07-17 14:50:01 · 239 阅读 · 0 评论 -
2989:糖果
不是很理解。 ’ #include<iostream> #include<string.h> using namespace std; int dp[101][101],a[101]; int main() { int n,k,i,j; cin>>n>>k; memset(dp,-1,sizeof(dp)); for(i=1;i<...转载 2019-07-12 18:28:53 · 147 阅读 · 0 评论 -
算法提高 矩阵乘法
#include<bits/stdc++.h> using namespace std; #define ll long long ll n,m[2000]; ll d[1010][1010]; const ll MAX=1e18; ll matrix(int n) { ll sum; memset(d,0,sizeof(d)); for(int len=2;len<=...原创 2019-07-07 17:30:28 · 151 阅读 · 0 评论 -
算法训练 传球游戏
【问题描述】 上体育课的时候,小蛮的老师经常带着同学们一起做游戏。这次,老师带着同学们一起做传球游戏。 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师再次吹哨子时,传球停止,此时,拿着球没传出去的那个同学就是败者,要给大家表演一个节目。 聪明的小蛮提出一个有趣的问题:有多少...转载 2019-01-25 20:10:48 · 198 阅读 · 0 评论 -
算法训练 开心的金明
很多这类型的题,其实可以归为一类,主要思想就是构造一个dp[][]二维数组,然后dp[i][j]即表示的是对于前i件商品来说不超过j元的最优解,dp初始为0,然后进行m次循环,每次输入v,p;两种情况: 1:如果v>j,则dp[i][j] = dp[i - 1][j]; 2:如果v<=j,则dp[i][j] = max(dp[i - 1][j],dp[i - 1][j - a] + v...转载 2019-01-25 20:28:15 · 155 阅读 · 0 评论 -
点菜
题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种。 uim指着墙上的价目表(太低级了没有菜单),说:“随便点”。 题目描述 不过uim由于买了一些辅(e)辅(ro)书,口袋里只剩M元(M≤10000)。 餐馆虽低端,但是菜品种类不少,有N种(N≤100),第i种卖ai 元(a i≤1000)。由于是很低端的餐馆,所以每种菜只有一份。 小A奉行“不把钱...原创 2019-02-17 19:53:52 · 160 阅读 · 0 评论 -
导弹拦截
#include<algorithm> #include<cstdio> #include<cstring> using namespace std; int n,a[100001],f[100001],d[100001],ans=1,t=0; //d表示每一组的最小的下标 //f表示该组有多少 int main() { while(~scanf("...原创 2019-02-28 17:18:05 · 104 阅读 · 0 评论 -
P1091 合唱队形
#include<cstdio> #include<algorithm> using namespace std; int n,a[105],f[2][105],ans; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); a[0]=0; for(in...原创 2019-02-28 17:39:48 · 161 阅读 · 0 评论 -
算法训练 拦截导弹
这道题目来自1999年NOIP全国联赛提高组。是一个基础的序列型动态规划问题。看到题目就知道第一个问题是严格递减子序列问题。比较有趣的是第二个问题,最少需要几套系统才能拦截所有导弹,就是有多少个递减序列。第一个想法就是把最长的递减子序列给排除之后对剩余的元素再来排除,最终得到最后结果。但是这个想法实现比较困难。 这里给出答案,即序列的最长单调递增序列长度为第二问的答案。 假如某序列完全递减,...原创 2019-02-26 15:37:54 · 395 阅读 · 0 评论 -
P1280 尼克的任务
#include<iostream> #include<algorithm> using namespace std; long int n,k,sum[10001],num=1,f[10001]; struct ren{ long int ks,js; }; ren z[10001]; int cmp(ren a,ren b) { return a.ks>...原创 2019-03-02 15:47:33 · 120 阅读 · 0 评论 -
P1880 [NOI1995]石子合并
#include<iostream> #include<cstdio> #include<cmath> using namespace std; int n,minl,maxl,f1[300][300],f2[300][300],num[300]; int s[300]; int main() { scanf("%d",&n); for(int i...原创 2019-03-02 16:21:26 · 125 阅读 · 0 评论 -
P1140 相似基因
#include<iostream> #include<algorithm> using namespace std; const int N=1e2+50; int dp[N][N]; int la,lb,a[N],b[N]; int v[6][6]={ {0,0,0,0,0,0}, {0,5,-1,-2,-1,-3}, {0,-1,5,-3,-2,-4...原创 2019-03-02 17:21:56 · 154 阅读 · 0 评论 -
算法训练 K好数
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int MAX_=101; const int M=1000000007; int f[MAX_][MAX_]; int main() { int l,k; long long ans,n; w...原创 2019-03-06 15:11:51 · 200 阅读 · 0 评论 -
P1005 矩阵取数游戏
输入样例 2 3 1 2 3 3 4 2 输出 样例 82 #include<bits/stdc++.h> #define in(x) x=read() #define k m-(R-L) #define MAXN 81 #define bll __int128 using namespace std; inline int read() { int X=0,w=1; char...原创 2019-03-09 21:07:47 · 107 阅读 · 0 评论 -
P1006 传纸条
input 3 3 0 3 9 2 8 5 5 7 0 output 82 30%的数据满足:1 <=m,n≤10 100%的数据满足:1 <=m,n ≤50 竟然过了!!! #include<bits/stdc++.h> using namespace std; int vis[60][60]; int s[60][60][60][60]; int main() { ...原创 2019-03-09 21:32:52 · 82 阅读 · 0 评论 -
算法提高 概率计算
动态规划 #include<stdio.h> double dp[101][100*101+1]; int main() { int a,b,x,i,j,n,k; scanf("%d%d%d%d",&n,&a,&b,&x); if(x<n*a||x>n*b) printf("0.0000\n"); else { for(i...原创 2019-07-07 15:49:23 · 139 阅读 · 0 评论 -
算法提高 金明的预算方案
此题是01背包问题的变形。物品的重要度乘以价格是背包问题中的价值,物品的价格是背包问题中的体积。 1、我们可以把如何在众多主件与附件之中选择购买的问题转变为看成购买的5种方案: (1)什么都不买,(2)只买主件,(3)买主件和附件1,(4)买主件和附件2,(5)买主件和两个附件。 2、有些主件有附件,而有些没有,这为我们思考带来了负担,我们完全可以假设任何主件都有两个附件,也就是说如果题目没有...转载 2019-07-07 16:45:24 · 122 阅读 · 0 评论 -
选菜
#include<cstdio> #include<iostream> using namespace std; #define N 1001 int f[N],b[N],s; struct node{ int jg,mw,bh; }t[N]; int main() { int n,m; double xx,x1; scanf("%d%d",&n,&am...转载 2019-07-17 17:00:21 · 109 阅读 · 0 评论