題面很長,實質很水的一道期望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 ...