社区讨论

60分萌新求改

P1941[NOIP 2014 提高组] 飞扬的小鸟参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@mi6wlcfr
此快照首次捕获于
2025/11/20 12:00
4 个月前
此快照最后确认于
2025/11/20 12:00
4 个月前
查看原帖
CPP
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define INF 0x3f3f3f3f

int n,m,k;
int up[10010];
int down[10010];
int low[10010];
int high[10010];
int f[10010][2010];
bool e[10010];
int cnt=0;





int main(){
    scanf("%d%d%d",&n,&m,&k);
    int i,j,t;
    memset(e,false,sizeof(e));
    memset(f,0x3f,sizeof(f));
    for(i=1;i<=m;i++)
        f[0][i]=0;
    for(i=0;i<n;i++){
        scanf("%d%d",&up[i],&down[i]);
        high[i]=m+1;
    }
    high[n]=m;
    low[n]=1;
    for(i=0;i<k;i++){
        int p;
        scanf("%d",&p);
        e[p]=true;
        scanf("%d%d",&low[p],&high[p]);
    }
    for(i=0;i<=n;i++){
        for(j=low[i]+1;j<high[i];j++){
            if(j-up[i-1]>0){
                int minn=min(f[i-1][j-up[i-1]],f[i][j-up[i-1]]);
                f[i][j]=min(f[i][j],minn+1);
            }
            if(j==m){
                for(t=0;t<=up[i-1];t++)
                    if(j-t>0){
                        int minn=min(f[i-1][j-t],f[i][j-t]);
                        f[i][j]=min(f[i][j],minn+1);
                    }
            }
        }
        for(j=high[i]-1;j>low[i];j--){
            f[i][j]=min(f[i][j],f[i-1][j+down[i-1]]);
            if(e[i] && f[i][j]!=INF){
                cnt++;
                e[i]=false;
            }
        }
    }
    //for(i=0;i<=n;i++)
        //for(j=high[i];j>=low[i];j--)
            //f[i][j]=min(f[i][j],f[i-1][j+down[i-1]]);
    int ans=INF;
    for(i=1;i<=m;i++)
        ans=min(ans,f[n][i]);
    if(ans!=INF)printf("1\n%d",ans);
    else printf("0\n%d",cnt);
    //for(i=0;i<=n;i++){
        //for(j=1;j<=m;j++)
            //if(f[i][j]==INF)printf("INF ");
            //else printf("%d ",f[i][j]);
        //printf("\n");
    //}
    return 0;
}

回复

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

正在加载回复...