JOJ 2491 What is your level? 【动态规划(勉强可划分为此方面)】

【JOJ 2491】

 

【原题链接】

http://acm.jlu.edu.cn/joj/showproblem.php?pid=2491

【题目大意】

输入一组同学的成绩(语文和数学),将同学分级,分级方法为:定义a两科分数一科高于一科高于等于b,则说a的级别应该比b好,每次去除没有比其好的同学作为一级,剩下降级,依次类推。输入学号,输出级数。

也可以用dp,就是根据分数dp:

if(score[i][j]) level[i][j]=(level[i+1][j]>level[i][j+1]?level[i+1][j]:level[i][j+1])+1;

else level[i][j]=level[i+1][j]>level[i][j+1]?level[i+1][j]:level[i][j+1];

这个是状态转移方程。其他想法和第一种方法类似。

【解题思想】

用分数dp,按说的方法,将同学分级。也可以由下到上分级。

 

[code]

#include <iostream>

#include <cstdio>

#include <cstring>

using namespace std;

 

long student[200005][2],score[410][410],level[410][410];

 

int main()

{

        long caseNum,stuNum,i,j,l,m,testNum,stuID;

        scanf("%ld",&caseNum);

        while(caseNum--)

        {

               scanf("%ld",&stuNum);

               memset(score,0,sizeof(score));

               for(i=0;i<stuNum;i++)

               {

                       scanf("%ld%ld",&student[i][0],&student[i][1]);

                       score[student[i][0]][student[i][1]]++;

               }

               l=0;

               while(stuNum)

               {

                       m=-1;

                       l++;

                       for(i=400;i>=0;i--)

                       {

                               for(j=400;j>m;j--)

                {//实际上用分数遍历,找到有该分且同级的同学。

                                      if(score[i][j])

                                      {

                                              m=j;

                                              stuNum-=score[i][j];

                                              level[i][j]=l;

                                              score[i][j]=0;

                                              break;

                                      }

                               }

                       }

               }

               scanf("%ld",&testNum);

               while(testNum--)

               {

                       scanf("%ld",&stuID);

                       printf("%ld\n",level[student[stuID][0]][student[stuID][1]]);

               }

        }

        return 0;

}

[\code]

posted on   liugoodness  阅读(262)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述

导航

< 2010年3月 >
28 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 1 2 3
4 5 6 7 8 9 10

统计

点击右上角即可分享
微信分享提示