回 帖 发 新 帖 刷新版面

主题:[讨论]这个该怎么做呀?"选题"

文体描述:大学里执行学分制,第门课程都有一定的学分,有些课程还有“先修课程”。学生修完一个课程就能获得相应的学分。学生入学时选定自己的课程,第一个学生可选课程数目是给定的,现请你找出一个方案,使你得的学分最多。
输入:第一行两个数m,n分别表示选课程总数和学生可选课程总数 1<=m<100,1<=n<=m
         以下有m行表示课程,课程号依次为1,2,……,m。第行两个整数,第一个表示“先修课程号”,没有用0表示,第二个表示该课程的学分。
输出:一个整数,最大学分数。

谢谢哪位高手解答一下,十分感谢/最好有源程序

回复列表 (共2个回复)

沙发

DP

板凳

program classes;
var class:array [0..100] of longint;
    i,j,bh,judge:longint;
begin
  readln(m,n);
  fillchar(class,sizeof(class),0);
  for i:=1 to m do
  begin
    readln(bh,judge);
    class[i]:=class[bh]+judge;
  end;
  for i:=1 to m-1 do
    for j:=i+1 to m do
      if class[i]<class[j] then
      begin
        judge:=class[i];
        class[i]:=class[j];
        class[j]:=judge;
      end;
  judge:=0;
  for i:=1 to n do
    judge:=judge+class[i];
  writeln(judge);
end.

{需注意的是:
输入:第i行所用的"先修课程"只能在第1到i-1行中....}
{若想修改不足可先对输入数据按所用的"先修课程"从小到大排序.在做..}

我来回复

您尚未登录,请登录后再回复。点此登录或注册