动态规划入门(二)
来源:互联网 发布:幼儿园虐童 知乎 编辑:程序博客网 时间:2024/06/03 21:35
例1.最长不下降子序列
这没有什么好讲的,就是不断枚举前面的。。。遇到可以更新就更新,最后输出!
见代码
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>using namespace std;int f[100001],p[100001],a[100001];void out(int i){ if(p[i]!=0)out(p[i]); printf("%d ",a[i]);}int main(){ int i,j,k,n,m; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&a[i]); int ans=0; for(i=1;i<=n;i++){ int t=0; for(j=1;j<i;j++) if(f[j]>f[t] && a[j]<a[i]) t=j; p[i]=t;f[i]=f[t]+1; if(f[i]>f[ans])ans=i; } printf("max=%d\n",f[ans]); out(ans); return 0;}
例2.导弹拦截
第一问:一个最长不上升子序列
第二问:一个最长上升子序列(据贪心法分析得)
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>using namespace std;int f1[100001],a[100001],f[100001];int main(){ int i,j,k,n=0,m; while(!feof(stdin)){ scanf("%d",&a[++n]); } int ans=0,ans1=0;n--; for(i=1;i<=n;i++){ int t=0,t1=0; for(j=1;j<i;j++){ if(f[j]>f[t] && a[i]<a[j])t=j; if(f1[j]>f1[t1] && a[i]>a[j])t1=j; } f[i]=f[t]+1;f1[i]=f1[t1]+1; if(ans<f[i])ans=f[i]; if(ans1<f1[i])ans1=f1[i]; } printf("%d\n%d\n",ans,ans1); return 0;}
推荐几篇动态规划的博客
六,五,四,三,二,一
0 0
- 动态规划入门(二)
- 动态规划入门<二>
- 动态规划(二)
- 动态规划(二)
- 动态规划——数位dp入门(二)
- 动态规划入门(三)
- 动态规划入门(四)
- 动态规划入门(五)
- 动态规划入门(六)
- 动态规划入门(转)
- 动态路径规划(二)
- 动态规划知识点(二)
- 浅谈动态规划(二)
- 动态规划(二.LCS)
- 动态规划总结(二)
- 动态规划入门(二)DP 基本思想 具体实现 经典题目 POJ1088 POJ1163 POJ1050
- 动态规划入门(二)DP 基本思想 具体实现 经典题目 POJ1088
- 防卫导弹(动态规划入门题)
- 支付宝支付配置
- findChessboardCorners
- Ada and Cycle
- JPA-4 映射关联关系
- AEZ学习笔记(2):关键帧动画与技法
- 动态规划入门(二)
- 自己实现Spring IoC容器(二)读取配置文件
- react-native 在android封装原生listView
- 对tcp三次握手的详解之 理解TCP序列号(Sequence Number)和确认号(Acknowledgment Number)
- Activity的4种启动模式
- 前端中与宽高有关的属性
- 日志分析利器elk与logback(log4j)实战
- Java-数据类型转换
- 《PHP实现添加图片水印函数封装》