P1091 合唱队形

看一下题解吧,你好i需要正反搜一下lcs ,然后合并

#include<bits/stdc++.h>
using namespace std;
#define LOACL  freopen("in","r",stdin);\freopen("out","w",stdout); const int  inf = 987654321;
const int sz = 1e6 + 5;
const int mod = 1e9 + 7;
const int sqrtn = 300; #define add(u,v,w) (e[++tot]=(edge){v,head[u],1},head[u]=tot;)
#define f(i,l,r) for(int i=(int)l;i<=(int)r;++i)
#define g(i,l,r) for(int i=(int)l;i>=(int)r;--i)
#define CLR(arr,val) memset(arr,val,sizeof(arr))
typedef long long ll;
int n,a[sz],dp[2][sz],ans;
int main()
{LOACLcin>>n;f(i,1,n)cin>>a[i];f(i,1,n)f(j,0,i-1)if(a[i]>a[j])dp[0][i]=max(dp[0][i],dp[0][j]+1); g(i,n,1)g(j,n+1,i+1) if(a[i]>a[j]) dp[1][i]=max(dp[1][i],dp[1][j]+1);f(i,1,n) ans=max(ans,dp[0][i]+dp[1][i]-1);cout<<n-ans<<endl;return 0;
}

View Code

P1280 尼克的任务

倒着搜索寻找是否能休息

转移方程 : f[i]=f[i+1]+1;

     d[i]=f[i+s];  i 时间内有任务 需要向后找状态

#include<bits/stdc++.h>
using namespace std;
#define LOACL  freopen("in","r",stdin);\freopen("out","w",stdout); const int  inf = 987654321;
const int sz = 1e6 + 5;
const int mod = 1e9 + 7;
const int sqrtn = 300; #define add(u,v,w) (e[++tot]=(edge){v,head[u],1},head[u]=tot;)
#define f(i,l,r) for(int i=(int)l;i<=(int)r;++i)
#define g(i,l,r) for(int i=(int)l;i>=(int)r;--i)
#define CLR(arr,val) memset(arr,val,sizeof(arr))
typedef long long ll;
ll n,m,num=1;
ll sum[sz],f[sz];
struct node
{ll l,r;
}e[sz];
bool cmp(node l,node r)
{return l.l>r.l;
}
int main()
{LOACLcin>>n>>m;f(i,1,m){cin>>e[i].l>>e[i].r ;sum[e[i].l]++;}sort(e+1,e+m+1,cmp);g(i,n,1){if(sum[i]==0)f[i]=f[i+1]+1;else {f(j,1,sum[i]){if(f[i]<f[i+e[num].r])f[i]=f[i+e[num].r];     num++;}} }cout<<f[1]<<endl; return 0;
}

View Code

P1880 [NOI1995]石子合并

处理一下 前缀和 因为是一个环 所以2倍

 状态转移 dp[i][j]=max/min(dp[i][k]+dp[k+1][j]+sum(i,j));

 #include<bits/stdc++.h>using namespace std;#define LOACL  freopen("in","r",stdin);\freopen("out","w",stdout); const int  inf = 987654321;const int sz = 1e6 + 5;const int mod = 1e9 + 7;const int sqrtn = 600; #define add(u,v,w) (e[++tot]=(edge){v,head[u],1},head[u]=tot;) #define f(i,l,r) for(int i=(int)l;i<=(int)r;++i)#define g(i,l,r) for(int i=(int)l;i>=(int)r;--i)#define CLR(arr,val) memset(arr,val,sizeof(arr)) typedef long long ll; int n,a[300],f1[300][300],f2[300][300],sum[300];int main(){LOACLcin>>n;f(i,1,n){cin>>a[i];a[i+n]=a[i];}f(i,1,n<<1){sum[i]=sum[i-1]+a[i];}g(i,n<<1,1){f(j,i+1,min(n+n,i+n-1)){f2[i][j]=inf;f(k,i,j-1){f1[i][j]=max(f1[i][j],f1[i][k]+f1[k+1][j]+sum[j]-sum[i-1]);f2[i][j]=min(f2[i][j],f2[i][k]+f2[k+1][j]+sum[j]-sum[i-1]);}}}// f2 min int maxn = -inf,minn = inf;f(i,1,n){maxn =max(maxn,f1[i][i+n-1]);minn =min(minn,f2[i][i+n-1]); }cout  <<minn<<endl;cout  <<maxn<<endl;return 0;}

View Code

转载于:https://www.cnblogs.com/corx/p/8580292.html

LuoGU 线性DP相关推荐

  1. 0x51.动态规划 - 线性DP(习题详解 × 10)

    目录 0x51.动态规划 - 线性DP 0x51.1 LIS问题 Problem A. 登山 (最长下降子序列) Problem B. 友好城市(思维) Problem C. 最大上升子序列和 0x5 ...

  2. UVA11584 划分成回文串 Partitioning by Palindromes(线性DP划分+DP判断回文串)

    整理的算法模板合集: ACM模板 依旧是线性DP 我们使用闫氏DP分析法 总体DP转移的时间复杂度为O(n2)O(n^2)O(n2). 但是这里牵扯到判断 i\tt ii 到 j\tt jj 是否为回 ...

  3. 洛谷P2401 不等数列(线性DP)

    本题使用的是线性DP.就是DP数组难以思考,这里我直接给出 dp[i][j]:表示 1 ~ i 这 i 个数 , 其中j 个 " < " 有几种方法 假设我们已经把 n - ...

  4. CodeForces - 1096D Easy Problem(线性dp)

    题目链接:点击查看 题目大意:给出一个字符串,每个字符都有一个权值,现在需要删除权值和最少的字符,满足字符串中不再含有子序列"hard" 题目分析:线性dp,但我不会,看着题解写的 ...

  5. CodeForces - 456C Boredom(线性dp)

    题目链接:点击查看 题目大意:给出一个由n个数字组成的数列,现在给出规则是,每次选择数列中的一种数字 x,选择后的贡献为 x,不过操作后会删除掉所有数值为 x + 1 和 x - 1 的数,现在问如何 ...

  6. POJ - 1050 To the Max(最大连续子段和,线性dp)

    题目链接:点击查看 题目大意:给出一个n*n的矩阵,每个点都有一个权值,现在要从中选取一个子矩阵要求权值和最大,问这个最大权值和是多少 题目分析:因为是要求子矩阵的权值和最大的问题,我们可以直接维护一 ...

  7. 牛客 - 「火」皇家烈焰(线性dp)

    题目链接:点击查看 题目大意:给出一个字符串表示扫雷游戏,其中: 0:这个格子没有烈焰,且其左右两个格子均没有烈焰 1:这个格子没有烈焰,且其左右两个格子中只有一个烈焰 2:这个格子没有烈焰,且其左右 ...

  8. CH 5102 Mobile Service(线性DP)

    CH 5102 Mobile Service \(solution:\) 这道题很容易想到DP,因为题目里已经说了要按顺序完成这些请求.所以我们可以线性DP,但是这一题的状态不是很好设,因为数据范围有 ...

  9. 动态规划 —— 线性 DP

    [概述] 线性动态规划,是较常见的一类动态规划问题,其是在线性结构上进行状态转移,这类问题不像背包问题.区间DP等有固定的模板. 线性动态规划的目标函数为特定变量的线性函数,约束是这些变量的线性不等式 ...

最新文章

  1. php中的全局变量$_POST收集表单数据
  2. 昆山第二中等专业学校计算机分数线,昆山第二职业中学录取分数线
  3. C#之windows桌面软件第三课:完整的串口调试助手
  4. 青少年计算机学奥林匹克大赛,2019年第36届全国青少年信息学奥林匹克竞赛获奖规则...
  5. 各浏览器内核与C#WinForm开发Demo
  6. Sites Table
  7. windows和linux命令的区别,linux和windows命令区别
  8. Bailian2698 八皇后【回溯】
  9. 碳中和数据全集-最全碳排放、碳封存、碳排放权配额、碳交易、能源消费与二氧化碳排放
  10. 数据仓库系列之总线架构
  11. 手持小电风扇原理图挂脖小风扇电路图
  12. 学习笔记——最小生成树
  13. 【美图秀秀】如何P图恶搞——室友的噩梦
  14. 如何办理杭州市民卡|非杭户籍人员个人申领流程
  15. HyperV使用主机摄像头
  16. Lambda与Stream流
  17. ffmpeg批量转换m4a为mp3
  18. SAP MB5B报表ALV显示
  19. linux从视频中提取音乐,Linux下从电影(avi)中提取声音
  20. 小白入门--IC设计中Xilinx IP核申请与使用

热门文章

  1. POJ 1651 Multiplication Puzzle 区间dp(水
  2. IE滤镜实现透明度/阴影/渐变等特效
  3. ArcEngine编辑功能的实现(二)
  4. 运维老鸟谈生产场景如何对linux系统进行分区?
  5. Leetcode 375. 猜数字大小 II 解题思路及C++实现
  6. Leetcode 350. 两个数组的交集 II 解题思路及C++实现
  7. GNU Radio ieee802-15-4、ZigBee 实现
  8. Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)
  9. 如何用python画函数曲线_Python笔记:用matplotlib绘制函数曲线图
  10. xshell突然连接不上虚拟机解决办法