NOIP2016提高組 換教室

2022-06-03 05:03:12 字數 1256 閱讀 4747

題面很長,實質很水的一道期望dp題。題面自帶勸退效果。

首先用floyd算出任意兩點的最短路徑。然後設f(i,j,0)為前i節課申請更換j節,且不申請第i節時的最小期望;設f(i,j,1)前i節課申請更換j節,且申請第i節時的最小期望。

可得下面這個超長的狀轉方程:

f(i,j,0)=min

f(i,j,1)=min

注意f(i,0,0)意味著一節課都不申請,需要特判f(i,0,0)=f(i-1,0,0)+dist(c[i-1],c[i])

#include #include 

#define maxv 310

#define maxn 2010

using

namespace

std;

const

int inf = 1000

;int v, e; //

v表示牛牛學校裡教室的數量;e表示牛牛的學校裡道路的數量

intdist[maxv][maxv];

void add_edge(int

from, int to, int

weight)

void

floyd()

for (int k = 1; k <= v; k++)

for (int i = 1; i <= v; i++)

for (int j = 1; j <= v; j++)

dist[i][j] = min(dist[i][j], dist[i][k] +dist[k][j]);

}int n, m; //

n表示這個學期內的時間段的數量;m表示牛牛最多可以申請更換多少節課程的教室

int c[maxn]; //

第i個時間段牛牛被安排上課的教室

int d[maxn]; //

第i個時間段另一間上同樣課程的教室

double k[maxn]; //

牛牛申請在第i個時間段更換教室獲得通過的概率

void

load()

inttmp1, tmp2, t***;

for (int i = 1; i <= e; i++)

}double dp[maxn][maxn][2

];int

main()

}printf(

"%.2f

", min(dp[n][m][0], dp[n][m][1

]));

return0;

}

NOIP 2016 提高組 換教室

先用弗洛伊德求出兩兩點的最短路,設dp fi j,0 表示當前走到了i這個點,申請了j次,在原點的期望距離,fi j,1 表示當前走到了i這個點,申請了j次,在申請點的期望距離 當然要加上沒有申請成功走到原點的期望距離 轉移 設ds 0 1,0 1 表示從上一輪的原點 申請點到當前的原點 申請點距離...

NOIP2016提高組day1 換教室

對於剛上大學的牛牛來說,他面臨的第乙個問題是如何根據實際情況申請合適的 課程。在可以選擇的課程中,有 2n 節課程安排在 n 個時間段上。在第 i 1 i n 個 時間段上,兩節內容相同的課程同時在不同的地點進行,其中,牛牛預先被安排在教室 ci 上課,而另一節課程在教室 di 進行。在不提交任何申...

2016 NOIP提高組 換教室 題解

題目傳送門 題目大意 牛牛要上 n nn 天課,第 i ii 天在 c i c i c i 號教室,可以申請換至多 m mm 天的教室,第 i ii 天有 p i p i p i 的申請成功機率,申請成功的話就可以在 d i d i d i 號教室上課,第 i ii 天上完課後要走到第 i 1 i ...