題目戳此
乙個比較毒瘤的dp題。
設f[i][j][1/0]為前i個時段、申請j次、第i個時段申請成功與否
思考下面幾種情況:
一:i未申請f[i][j][0]
(1)i-1申請
1.i-1申請成功
2.i-1申請失敗
(2)i-1未申請
二:i申請f[i][j][1]
(1)i-1申請
1.前後均成功
2.前成功後失敗
3.前失敗後成功
4.前後均失敗
(2)i-1未申請
1.i申請成功
2.i申請失敗
以上九種情況都體現在**裡了:
1 #include2#define ll long long
3#define rg register
4#define us unsigned
5#define eps 1e-6
6#define inf 0x3f3f3f3f
7#define ls k<<1
8#define rs k<<1|1
9#define tmid ((tr[k].l+tr[k].r)>>1)
10#define nmid ((l+r)>>1)
11#define thispoint tr[k].l==tr[k].r
12#define pushup tr[k].wei=tr[ls].wei+tr[rs].wei
13using
namespace
std;
14 inline void read(int &x)
22while(c>='
0'&&c<='9'
)26 x*=f;27}
28int
n,m,v,e;
29int c[2010],d[2010],dis[310][310
];30
double k[2010],f[2010][2010][2
];31 inline void
initi()37}
38for(int i=1;i<=n;i++)read(c[i]);
39for(int i=1;i<=n;i++)read(d[i]);
40for(int i=1;i<=n;i++)cin>>k[i];
41for(int i=1;i<=e;i++)47}
48 inline void
floyd()55}
56}57}
58}59 inline void
dp()64}
65 f[1][0][0]=0
;66 f[1][1][1]=0;67
for(int i=2;i<=n;i++)73}
74}75}
76 inline void
print()
82 printf("
%.2lf\n
",ans);83}
84int
main()
完結撒花~~~
洛谷P1850 換教室
傳送門啦 這是寫第乙個概率期望dp。一般看見這種題就想暴力了,看一下資料範圍,暴力應該還是挺好想的吧。24分注意到有6個測試點m 0m 0,則說明不能提出申請,那麼只需要求出全圖的兩兩之間的最短路,路徑唯一確定。52分注意到另外有7個測試點m 1m 1,只能提出一次申請。我們可以直接列舉在 提出申請...
洛谷P1850 換教室
心力憔悴。不知道說什麼。方程還是很好推的,我也很快就推出來了。結果 花了4h 重構了幾遍 才終於意識到這樣寫有問題。真是。include include include include using namespace std const int maxn 2e3 20 const int maxm ...
洛谷P1850 換教室
對於剛上大學的牛牛來說,他面臨的第乙個問題是如何根據實際情況申請合適的課程。在可以選擇的課程中,有 2n 節課程安排在 n 個時間段上。在第 i 1 leq i leq n 個時間段上,兩節內容相同的課程同時在不同的地點進行,其中,牛牛預先被安排在教室 c i 上課,而另一節課程在教室 d i 進行...