2022CSP-J 普及组第二轮试题及解析( 第四题上升点列point)

第四题上升点列参考程序代码:

#include<bits/stdc++.h> 
using namespace std;
int n,k;
struct points {
    int x,y;
} p[510];

bool cmp(const points a,const points b) {
    if(a.x==b.x) return a.y<b.y;
    else return a.x<b.x;
}
int f[510][110];//以i点为终点,再添加上j个点的情况下最大序列长度
int main() {
    scanf("%d %d",&n,&k);
    for(int i=1; i<=n; i++) {
        scanf("%d %d",&p[i].x,&p[i].y);
    }
    sort(p+1,p+1+n,cmp);
    int ans=0;
    for(int i=1; i<=n; i++) {//以i为终点
        for(int j=0; j<=k; j++) {//添加j个点
            f[i][j]=j+1;//以i为终点,后续添加j个点最短的长度
            for(int l=1; l<i; l++) { //l为i的前一个点
                if(p[l].x<=p[i].x&&p[l].y<=p[i].y) {//横坐标、纵坐标值均单调不减
                    int t=p[i].x-p[l].x+p[i].y-p[l].y-1;//需要添加的点数量
                    if(j>=t) f[i][j]=max(f[i][j],f[l][j-t]+t+1);
                    cout<<p[i].x<<" "<<p[l].x<<" "<<p[i].y<<" "<<p[l].y<<" "<<t<<endl;
                }
                cout<<"i="<<i<<" j="<<j<<" l="<<l<<" f="<<f[i][j]<<endl;
            }

            ans=max(ans,f[i][j]);
        }
    }
    printf("%d",ans);
    return 0;
}

第四题上升点列文件提交参考程序代码:

#include<bits/stdc++.h> 
using namespace std;
int n,k;
struct points
{
    int x,y;
} p[510];

bool cmp(const points a,const points b) 
{
    if(a.x==b.x) return a.y<b.y;
    else return a.x<b.x;
}
int f[510][110];//以i点为终点,再添加上j个点的情况下最大序列长度
int main() 
{
	//打开输入文件,输出文件
	freopen("point.in","r",stdin);
	freopen("point.out","w",stdout);
    scanf("%d %d",&n,&k);
    for(int i=1; i<=n; i++) 
	{
        scanf("%d %d",&p[i].x,&p[i].y);
    }
    sort(p+1,p+1+n,cmp);
    int ans=0;
    for(int i=1; i<=n; i++) 
	{//以i为终点
        for(int j=0; j<=k; j++) 
		{//添加j个点
            f[i][j]=j+1;//以i为终点,后续添加j个点最短的长度
            for(int l=1; l<i; l++) 
			{ //l为i的前一个点
                if(p[l].x<=p[i].x&&p[l].y<=p[i].y) 
				{//横坐标、纵坐标值均单调不减
                    int t=p[i].x-p[l].x+p[i].y-p[l].y-1;//需要添加的点数量
                    if(j>=t) f[i][j]=max(f[i][j],f[l][j-t]+t+1);
                    //cout<<p[i].x<<p[l].x<<p[i].y<<p[l].y<<t<<endl;
                }
                //cout<<"i="<<i<<" j="<<j<<" l="<<l<<" f="<<f[i][j]<<endl;
            }

            ans=max(ans,f[i][j]);
        }
    }
    printf("%d",ans);
    //关闭输入文件输出文件
	fclose(stdin);
	fclose(stdout);	
    return 0;
}

CSP-J2022 是中国计算机学会(China Computer Federation, CCF)主办的全国计算机能力竞赛,是一项面向大学生的计算机科学竞赛。初赛目以PDF格式发布,PDF是一种跨平台可移植文档格式,可以在不同操作系统和设备上进行查看和打印。初赛PDF包含了竞赛的相关信息,包括竞赛时间、地点、报名要求、参赛资料、目要求和提交方式等。 CSP-J2022初赛PDF首先会介绍竞赛的背景和目的,对参赛者进行必要的说明。接下来会列出竞赛的各个环节和时间安排,包括笔试、机试等。参赛者需要根据PDF中的要求准备相应的资料,并按照规定的时间和方式提交。 竞赛目通常会涉及到计算机科学的基础知识和编程能力。PDF中会给出具体的目要求和答格式,并提供样例输入输出供参赛者练习。参赛者需要下载并阅读PDF,理解目要求,并根据要求进行编程实现。提交答案时,需要按照PDF中的指示提交到指定的在线评测系统中进行自动评测。 CSP-J2022 初赛PDF的发布是为了方便参赛者获取竞赛信息和目要求,帮助参赛者做好充分的准备。参赛者需要仔细阅读PDF,理解竞赛的要求,合理安排学习时间,充分发挥自己的编程能力和思维能力。通过认真准备和实际操作,参赛者有机会在CSP-J2022竞赛中获得优异的成绩,并获得相关的荣誉和奖励。这也有助于提高参赛者的计算机技术水平和解决问的能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值