題意:給定n,k,m分別代表天數,每天上的課,以及科目數。
給定每門課的學分,已經基礎分數。
給定n天每天有哪些課能學。
求如何安排復習,使得GPA盡可能大且沒有掛科,算出GPA。
思路:最大費用最大流。定義函數f(score,credit)=credit×(4-3.0/1600×(100-score)^2)。每一天向匯點連邊,容量為k,費用0; 每門課
與每天根據是否在當天能上連邊,容量為k,費用為0;
源點向每門課連邊,若基礎分score小於60,則與源點連一條流量60-score、費用
inf的邊,保證優先到達60,接著從源點與該課程連40條流量分別為1,費用為f(x+1,)-f(x,p)的邊(40條代表61到100);若基礎分score
大於等於60,則連100-score條容量1、費用f(x+1,p)-f(x,p)的邊。跑完最大費用最大流之後,再看是否還有哪門課不及格,如果有ans=0,不然計算GPA。詳見代碼:
/*********************************************************
file name: hdu4406.cpp
author : kereo
create time: 2015年02月11日 星期三 15時35分08秒
*********************************************************/
#include
#include
#include
#include
#include
#include