动态规划
i榴莲臭臭配香茶
这个作者很懒,什么都没留下…
展开
-
闯关游戏(ccpc河南省赛)
传送门滚动dp因为当前的状态只与dp【i-1】有关 我们没有必要保留前面所有的项的值 只需要保留对我们有用的即可01背包 因为如果某一关卡直接跳过的话游戏就结束了 所以不能取max要给他一个初值后 再取最大值#include<bits/stdc++.h>using namespace std;int dp[3][6100];int a[6010],b[6110],c[6110],d[6101];int main(){ std::ios::sync_with_stdio(0);原创 2022-05-03 21:33:52 · 983 阅读 · 0 评论 -
Maximum Sum of Products(dp)
训练题题目说最多可以反转一段子区间 问最大的和是多少我们设dp数组的含义为前i的区间和 c[i][j]的含义是反转了i到j区间 这段区间的区间和c[i][j]=c[i+1][j-1]+a[i]*b[j]+a[j]*b[i]#include<stdio.h>#include<algorithm>using namespace std;const int N=1e3;long long dp[N*6+20],c[N*5+100][N*5+100];long long原创 2022-03-13 09:58:29 · 357 阅读 · 0 评论 -
括号配对(动态规划)
训练题Hecy 又接了个新任务:BE 处理。BE 中有一类被称为 GBE。以下是 GBE 的定义:空表达式是 GBE如果表达式 A 是 GBE,则 [A] 与 (A) 都是 GBE如果 A 与 B 都是 GBE,那么 AB 是 GBE下面给出一个 BE,求至少添加多少字符能使这个 BE 成为 GBE。输入格式输入仅一行,为字符串 BE。输出格式输出仅一个整数,表示增加的最少字符数。#include<iostream>#include<cstdio>#incl原创 2022-03-01 19:46:41 · 325 阅读 · 0 评论 -
最长上升子序列(登山)
for(i=1; i<=n; i++) { scanf("%d",&a[i]); dp[i]=1; for(j=1;j<i;j++) { if(a[j]<a[i]) dp[i]=max(dp[i],dp[j]+1); }// printf("~~ %d\n",dp[i]); }登山正着求一下 再反正求一下 再剪掉 转折的那座山 就是答案#include<stdio.h>#include<algorithm>原创 2022-01-12 21:21:13 · 170 阅读 · 0 评论