「RQNOJ155」吞噬比赛
题目描述
镇里举办贪吃比赛,一共比赛N天,规定:每次吃的必须比上次多,一天只能吃一次(撑死…),吃的天数最多的人将获得胜利,获得10000000000 mod 10 的奖金^_^
现在,Sally要参加比赛,她邀请参加OI的你一起帮忙,胜利后七三分成^_^
输入格式第一行一个数N,表示吃的天数(N<=10000)
第二行N个数,表示每天能吃的数量(数量最多10000)
输出格式一个数,表示最多吃的天数
样例输入
6
1 2 3 1 5 6
样例输出
5
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#include<iostream> using namespace std; int main() { int n,a[10001],f[10001]={0}; int mx=0; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } f[n]++; for(int i=1;i<=n;i++) { for(int j=i;j>=0;j--) { if(a[j]<a[i]){f[i]=max(f[j]+1,f[i]);} } mx=max(f[i],mx); } cout<<mx; return 0; } |
第二种方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include<iostream> #include<cstring> using namespace std; int main() { int n; int a[100001],f[100001],ans=0; cin>>n; memset(f,127/3,sizeof(f)); for(int i=1;i<=n;i++) { cin>>a[i]; } f[0]=0; for(int i=1;i<=n;i++) for(int j=ans;j>=0;j--) { if(a[i]>f[j]){f[j+1]=min(a[i],f[j+1]);ans=max(ans,j+1);break;} } cout<<ans; return 0; } |
Subscribe