猫史档案馆


[C++]简单动规能力测试“数字卡片”

用户:进阶的柯南进阶的柯南查看:19 回复:7 评论:19 创建时间:2024-08-17T10:47:07


题目描述 将n张卡片摆成一排,每张卡片上都有一个数字,需要从这排卡片中找出一组卡片,这组卡片的数字序列为公差为k的等差数列,(必须按照顺序找卡片,组成的数字序列也需要依照卡片的摆放顺序)。要求找出一组数量最多的卡片,请问满足条件的卡片组合最多为多少张? 输入格式 共两行,第一行两个数n和k。 第二行为n个用空格隔开的整数,表示每张卡片上的数字。 输出格式 一行,为所有满足条件的卡片组合中卡片最多的数量 样例输入   61 124357 样例输出 3 提示 30%的数据,n≤10;80%的数据,n≤5000,|k|≤500;100%的数据,n≤100000,|k|≤1000,每张卡片上数字绝对值小于等于100000。 样例解释 对于样例一来说,能组合为公差为1的卡片数值为: 1、12 2、123 3、23 4、45 其中数值为123的卡片组合中卡片数量最多,为3张卡片。 PS:可以把代码发在评论区给我测评 其他PS与上期相同,上期指路喵o.cn/wiki/forum/705456


回复

上一页1 页 / 共 1下一页
进阶的柯南进阶的柯南

不想改格式了凑合这看吧,主要信息我分段发在下面

点赞0


评论


进阶的柯南进阶的柯南

喵你猫吞我格式我喵

点赞0


评论


OLEEEEEEEEEEEEEEEEEEOLEEEEEEEEEEEEEEEEEE

我屮艸芔茻,上次我WA,这次得仁政了

#include<bits/stdc++.h>
using namespace std;
int n,k,Max=0,a[100010],b[100010];
int main(){
	scanf("%d%d",&n,&k);
	for(int i=1; i<=n; i++)
		scanf("%d",&a[i]);
	for(int i=1; i<=n; i++){
		b[a[i]]=1;
		b[a[i]]=max(b[a[i]],b[a[i]-k]+1);
		Max=max(Max,b[a[i]]);
	}
	printf("%d\n",Max);
    return 0;
}

点赞0


评论


OLEEEEEEEEEEEEEEEEEEOLEEEEEEEEEEEEEEEEEE

题目描述 
将n张卡片摆成一排,每张卡片上都有一个数字,需要从这排卡片中找出一组卡片,这组卡片的数字序列为公差为k的等差数列,(必须按照顺序找卡片,组成的数字序列也需要依照卡片的摆放顺序)。要求找出一组数量最多的卡片,请问满足条件的卡片组合最多为多少张?

输入格式 
共两行,第一行两个数n和k。 第二行为n个用空格隔开的整数,表示每张卡片上的数字。

输出格式 
一行,为所有满足条件的卡片组合中卡片最多的数量

样例输入 
6 1回车
1 2 4 3 5 7

样例输出 
3

点赞0


评论


OLEEEEEEEEEEEEEEEEEEOLEEEEEEEEEEEEEEEEEE

#include<bits/stdc++.h>
using namespace std;
int n,k,Max=0,a[100010],b[100010];
int main(){
	scanf("%d%d",&n,&k);
	for(int i=1; i<=n; i++)
		scanf("%d",&a[i]);
        for(int i=1; i<=n; i++) b[a[i]]=1
	for(int i=1; i<=n; i++){
		b[a[i]]=max(b[a[i]],b[a[i]-k]+1);
		Max=max(Max,b[a[i]]);
	}
	printf("%d\n",Max);
    return 0;
}

点赞0


评论


OLEEEEEEEEEEEEEEEEEEOLEEEEEEEEEEEEEEEEEE

疯了

#include<bits/stdc++.h>
using namespace std;
int n,k,Max=0,a[100010],b[100010];
int main(){
	scanf("%d%d",&n,&k);
	for(int i=1; i<=n; i++)
		scanf("%d",&a[i]);
        for(int i=1; i<=n; i++) b[a[i]]=1;
	for(int i=1; i<=n; i++){
		b[a[i]]=max(b[a[i]],b[a[i]-k]+1);
		Max=max(Max,b[a[i]]);
	}
	printf("%d\n",Max);
    return 0;
}

点赞0


评论


10cKYouse1f10cKYouse1f

#include <iostream>
using namespace std;
int n = 0;
int k = 1;
int nums[5001];
int ans = 1;
int Max = 0;
int Hash[5001];



int f(int nowNumS) {
	int nowNum = nums[nowNumS];
	for (int x = 0; x <= n; x++) {
		int nextNum = nums[x];
		if (nextNum - nowNum == k) {
			if(!Hash[x])
			{
				Hash[x] = f(x);
			}
			return 1 + Hash[x];
		}
	}
	return 1;
}



int main() {
	cin >> n >> k;
	for (int x = 0; x < n; x++) {
		cin >> nums[x];
	}
	for (int x = 0; x < n; x++) {
		Max = max(f(x),Max);
	}
	cout << Max;
	return 0;
}

点赞0


评论