为什么数之间的间距开到10或8都能过?
查看原帖
为什么数之间的间距开到10或8都能过?
661164
Zkl21楼主2023/6/23 09:57

想问一下,这道题两个数之间的距离开到10或8就能过的原因是数据水还是有什么原理吗?

代码中base表示两个数之间的最大间距。

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=110,M=N*90;
int l,n,s,t,m,a[N],b[N],f[M],base;
bool st[M];
int main()
{
    ios::sync_with_stdio(0);
    cin>>l>>s>>t>>m;
    for(int i=1;i<=m;i++)cin>>a[i];
    sort(a+1,a+1+m);
    if(s==t)
    {
        int res=0;
        for(int i=1;i<=m;i++)
            if(a[i]%s==0)res++;
        cout<<res;
        return 0;
    }
    base=min(s*t,8);
    for(int i=1;i<=m;i++)
    {
        int d=a[i]-a[i-1];
        if(d>=base)d=base;
        b[i]=b[i-1]+d;
        st[b[i]]=1;
    }
    n=b[m]+base;
    memset(f,0x3f,sizeof f);
    f[0]=0;
    for(int i=1;i<=n;i++)
    {
        int sum=0x3f3f3f3f;
        for(int j=i-t;j<=i-s;j++)
            if(j>=0&&f[j]<sum)sum=f[j];
        f[i]=sum+st[i];
    }
    int minn=0x3f3f3f3f;
    for(int i=b[m];i<=n;i++)minn=min(minn,f[i]);
    cout<<minn;
    return 0;
}
/*
想到正解了,但是写挂了
主要是一些细节问题的处理上,存在问题,刚开始写挂应该是没有考虑s=t的情况
主要有一个问题是 base 开到 10/8 能过?
*/
2023/6/23 09:57
加载中...