问题标题: 酷町堂:5098 等比子序列我怎么错了

0
0
已解决
高杨
高杨
资深守护
资深守护

30分,谁能帮我看看

 

#include<bits/stdc++.h>
#include<iostream>
#include <cstring>
using namespace std;
int a[100005],f[100005],d;
int dfs(int p)
{
    if(f[p]!=-1) return f[p];
    int ans=-1;
    for(int i=1;i<p;i++)
    {
        if((a[p]/a[i]==d&&a[p]%2==0&&a[i]%2==0)||a[i]==1)
        {
            ans=max(dfs(i),ans);
        }
    }
    if(ans!=-1)
    {
        f[p]=ans+1;
        return f[p];
    }
    else
    {
        f[p]=1;
        return f[p];
    }
}
int main()
{
    memset(f,-1,sizeof(f));
    int n,t;
    cin>>n>>d;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    int mx=-1;
    for(int i=1;i<=n;i++)
    {
        mx=max(mx,dfs(i));
    }
    cout<<mx;
    return 0;
}

 


1
已采纳
黄子扬
黄子扬
初级天翼
初级天翼

WA处:答案分两个数组存

TLE处:n方方法不可行

黄子扬在2020-05-19 22:19:56追加了内容

dpn方其实也能过,搜索没试过,比如我(划掉

答案分开存,升序降序各一个数组答案

0
许金夫
许金夫
初级天翼
初级天翼

你的if里面搞那么复杂干什么

我要回答