社区讨论

属于是不按照正常思路dp的菜狗了。。。

P1280尼克的任务参与者 3已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@lo8kxy8t
此快照首次捕获于
2023/10/27 20:18
2 年前
此快照最后确认于
2023/10/27 20:18
2 年前
查看原帖
本菜狗想练练dp
信心满满第一遍交上去直接WA+RE
删除了多余的部分&修改数组之后成了70
感觉主要的dp都是在以时间作为变量
但是我设的是以任务为变量
题解里面有类似想法的细节也不太一样
总是想请各位看看问题是出在哪里了QAQ
CPP
#include<bits/stdc++.h>
using namespace std;
int check;
int n,k,ans;
int f[10005];
bool tag[10005];
struct haha
{
    int l,r;
}a[10005];
bool cmp(haha x,haha y)
{
    if(x.l==y.l)
        return x.r<y.r;
    return x.l<y.l;
}
int main()
{
    scanf("%d%d",&n,&k);
    for(int i=1;i<=k;i++)
    {
        int x;scanf("%d%d",&a[i].l,&x);
        a[i].r=a[i].l+x-1;
    }
    sort(a+1,a+k+1,cmp);
    for(int i=1;i<=k;i++)
        if(a[i].r>=a[k].l)
            tag[i]=1;
    for(int i=0;i<=k;i++)
    {
        if(tag[i])
        {
            ans=max(ans,f[i]+n-a[i].r);
            continue;
        }
        int tmp;check=0;
        for(int j=i+1;j<=k;j++)
        {
            if(a[j].l>a[i].r)//满足条件
            {
                if(!check)
                    check=1,tmp=j;
                if(a[j].l!=a[tmp].l)//属于是后面的后面的了
                    break;
                f[j]=max(f[j],f[i]+a[j].l-a[i].r-1);
            }
        }
    }
    printf("%d\n",ans);
    return 0;
}

回复

6 条回复,欢迎继续交流。

正在加载回复...