c语言,贪心算法题,可以有偿 求求了

某学科老师布置了n个题目,每个题目都有相应的分数及截止日期。各个题目的分数及截止日期可能并不相同。对某题目而言,如果在该题目的截止日期前完成则可获得对应的分数,否则无法得分。假设每个题目均需要花费一天的时间来完成,这期间无法完成其他题目。请你设计算法指定题目的完成计划,从而使总的得分最大。 下面给出一个包含了7个题目及相应的分数、截止日期的实例: 题目 1 2 3 4 5 6 7 分数 6 7 2 1 4 5 1 截止日期(天) 1 1 3 3 2 2 4 对该实例而言,得分最大的作业完成方案为花费4天时间依次完成题目2,6,3,7。得分为15。 【输入形式】 输入数据第一行为一个整数n (0 <= n <= 10000), 表示题目数目 之后n行各有两个整数, 第i行为 pi, di (1 <= pi, di <= 10000),分别表示第i个题目的分数和截止时间 【输出形式】 一个整数, 为当前条件下的最大得分 【样例输入】 4 50 2 10 1 20 2 30 1 【样例输出】 80

意思就是从同一个截止日期中选出最大值求和就行了呗

用递归的。两倍工作量啊

typedef struct _ss
{
	int score;
	int days;
}ss;
 
void bubbleSort(ss* pData, int length)
{
	ss temp;
	for (int i = 0; i < length-1; i++)
	{
		for (int j = 0; j < length-i-1; j++)
		{
			if (pData[j].days < pData[j+1].days)
			{
				temp = pData[j];
				pData[j] = pData[j+1];
				pData[j+1] = temp;
			}
		}
	}
}

int calNum(ss *pData)
{
	if(pData->days == 0)
		return 0;
	ss premax = *pData++;
	while(pData->days == premax.days)
	{
		if (premax.score < pData->score)
			premax = *pData;
		pData++;
	}
	return premax.score + calNum(pData);
}

int main(void){
	int i,n,num=0;
	scanf_s("%d", &n);
	ss *pS = new ss[n+1];
	for (i = 0; i < n; i++)
	{
		scanf_s("%d%d", &pS[i].score, &pS[i].days);
	}
	bubbleSort(pS, n);
	pS[n].days = 0;
	//
	ss *pData = pS;
	num = calNum(pData);
	printf("result=%d", num);
	
	return 0;
}

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

typedef struct ss
{
	int score;
	int days;
};


void bubbleSort(ss* pData, int length)
{
	ss temp;
	for (int i = 0; i < length-1; i++)
	{
		for (int j = 0; j < length-i-1; j++)
		{
			if (pData[j].days < pData[j+1].days)
			{
				temp = pData[j];
				pData[j] = pData[j+1];
				pData[j+1] = temp;
			}
		}
	}
}
}


int main(void){

	int i,n,num=0;
	scanf_s("%d", &n);
	ss *pS = new ss[n];
	for (i = 0; i < n; i++)
	{
		scanf_s("%d%d", &pS[i].score, &pS[i].days);
	}
	bubbleSort(pS, n);

	ss premax = pS[0];
	for (i = 1; i < n; i++)
	{
		if (pS[i].days != premax.days)
		{
			num += premax.score;
			premax = pS[i];
		}
		else
		{
			if (premax.score < pS[i].score)
				premax = pS[i];
		}
	}
	num += premax.score;
	printf("result=%d", num);

	
	return 0;
}