UVA 607 – Scheduling Lectures (線性dp)

來源:互聯網
上載者:User

題目點擊開啟連結

題目大意:

你在一所學校教書,每節課時間長度L,你有n個主題必須要講完,每個主題時常為ti。

有兩個限制:1,每個主題只能在一節課內講完,不能分開在多節課;2,必須按主題順序講,不能打亂。

對於每節課,講完主題的內容會剩下時間t,如果t>10,會產生不滿意度(t-10)^2,如果 1<=t<=10, 學生很高興,所以產生不滿意度是負數的-C,如果t=0, 那麼不滿意度為0.

問講完所有主題,最少要用多少節課?如果有多種方案,要求不滿意度最低。

分析:

num[i]表示講完第i個主題,所用的最少節課
idx[i]表示講完i個主題,用了num[i]節課的最低不滿意度

對num進行dp求最少節課,對數組初始化INF
num[i] = min{num[k]+DI(k,i), 1<=k<=i}
在根據情況儲存idx數組

代碼:

#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<vector>using namespace std;typedef long long int64;const int INF = 0x3f3f3f3f;const int MAXN = 1010;int n, L, C, t[MAXN];int num[MAXN], idx[MAXN], sum[MAXN];int getDI(int tt){    if(tt==0) return 0;    else if(tt>=1 && tt<=10) return -C;    else return (tt-10)*(tt-10);}int main(){    int cas = 1;    while(~scanf("%d", &n) && n){        scanf("%d%d", &L, &C);        for(int i=1; i<=n; ++i){            scanf("%d", &t[i]);            sum[i] = sum[i-1] + t[i];        }        for(int i=1; i<=n; ++i){            num[i] = idx[i] = INF;            for(int j=1; j<=i; ++j){                if(sum[i]-sum[j-1] <= L){                    int DI = getDI(L-(sum[i]-sum[j-1]));                    if(num[j-1]+1 < num[i]){                        num[i] = num[j-1] + 1;                        idx[i] = idx[j-1] + DI;                    }else if(num[j-1]+1 == num[i]){                        idx[i] = min(idx[i], idx[j-1]+DI);                     }                }            }        }        if(cas!=1) puts("");        printf("Case %d:\n", cas++);        printf("Minimum number of lectures: %d\n", num[n]);         printf("Total dissatisfaction index: %d\n", idx[n]);    }    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.