【NOIP模拟】千帆渡
来源:互联网 发布:java打印杨辉三角10行 编辑:程序博客网 时间:2024/04/28 22:27
Description
Solution
比赛的时候就想到了正解,但是因为只剩下一个半小时,要打两题,就匆匆的打了过去,结果拿了零分。
设
显然可以
如果a[i]=b[j],如果是从a[k]和b[l]转移过来的,那么b[l]
Code
#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>#include<cstring>#include<map>#define fo(i,a,b) for(i=a;i<=b;i++)#define fod(i,a,b) for(i=a;i>=b;i--)using namespace std;const int maxn=5007;int i,j,k,l,t,n,m,ans,ans1,ans2;int f[maxn][maxn],a[maxn],b[maxn],g[maxn][maxn],h[maxn][maxn][2],ans3[maxn];map<int,int>p;int main(){// freopen("fan.in","r",stdin);// freopen("fan.out","w",stdout); scanf("%d",&n); fo(i,1,n)scanf("%d",&a[i]); scanf("%d",&m); fo(i,1,m)scanf("%d",&b[i]); fo(i,1,n){ fo(j,1,m){ f[i][j]=f[i-1][j]; h[i][j][0]=i-1,h[i][j][1]=j; if(a[i]==b[j]){ if(f[i][j]<f[i-1][g[i][j]]+1){ f[i][j]=f[i-1][g[i][j]]+1; h[i][j][0]=i-1,h[i][j][1]=g[i][j]; } } g[i+1][j]=g[i+1][j-1]; if(f[i][j]>f[i][g[i+1][j]]&&a[i+1]>b[j]){ g[i+1][j]=j; } if(f[i][j]>ans)ans1=i,ans2=j; ans=max(f[i][j],ans); } } printf("%d\n",ans); while(ans1>0&&ans2>0){ if(!p[b[ans2]])ans3[++ans3[0]]=b[ans2],p[b[ans2]]=1; int u=ans1,v=ans2; ans1=h[u][v][0]; ans2=h[u][v][1]; } fod(i,ans3[0],1)printf("%d ",ans3[i]);}
2 0
- 【NOIP模拟】千帆渡
- Noip模拟
- 【NOIP模拟】20151004模拟
- 【NOIP模拟】 20151005模拟
- 【NOIP模拟】 20151006模拟
- 【NOIP模拟】 20151007模拟
- 【NOIP模拟】20151014模拟
- 【NOIP模拟】20151015模拟
- 【09 NOIP 模拟】light
- [NOIP模拟]Day1
- 8.9CH NOIP模拟
- 8.10FCH NOIP模拟
- 8.13NOIP模拟
- 8.14NOIP模拟
- noip模拟赛 双城记
- Noip模拟总结
- 【noip模拟赛】密码
- [模拟][NOIP 2013]花匠
- 浏览器和服务器在基于https进行请求链接到数据传输过程中,用到了如下哪些技术
- QT 5.8 新特性
- android 内外置SD卡的研究
- Educational Codeforces Round 2 D. Area of Two Circles' Intersection
- 【虚拟按键】虚拟键适配PopupWindow显示位置
- 【NOIP模拟】千帆渡
- 标注文件格式转换功能的简单实现
- JavaScript强化教程 —— Cocos2d-JS自动JSB绑定规则修改
- 1041. Be Unique (20)
- 文件
- gem5模拟器安装
- java常用的数组、字符串、集合操作以及数据结构与算法基本知识
- 日期操作类 Date->long,long->Date
- React Native 学习笔记二(React Native开发环境的搭建for mac)