weixin_46319558
weixin_46319558
2021-05-20 00:09
采纳率: 100%
浏览 106

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

  • 点赞
  • 收藏

4条回答 默认 最新

  • technologist_37
    CSDN专家-link 2021-05-20 05:17
    已采纳

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

    点赞 评论
  • technologist_37
    CSDN专家-link 2021-05-20 08:39
    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;
    }
    点赞 1 评论
  • technologist_37
    CSDN专家-link 2021-05-20 13:10

    用递归的。两倍工作量啊

    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;
    }
    点赞 评论
  • QA_Assistant
    有问必答小助手 2021-05-20 11:58

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

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

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

    点赞 评论