problem description
alice 和 bob 準備 solo 一場演算法競賽。
比賽一共有 nn 個題,編號為 1,2…,n1,2…,n,對於第 ii 道題,alice 需要 a[i]a[i] 分鐘寫出乙份正確的**,bob 需要 b[i]b[i] 分鐘寫出乙份正確的**。
比賽規則為
每道題第乙個通過的人積 1 分,如果兩人同時 ac 該題,只有 alice 得分。
比賽時長為 10 ^ 10
18分鐘。
alice 和 bob 的比賽策略都滿足:決定要去做某道題後,會一直解決該題,直到自己或者對手 ac 此題,如果對手 ac 該題,則會立即放棄這題。
bob 寫完乙份正確的**後會立即提交,但 alice 寫完乙份正確的**,可以先暫時不交題,等之後再交(交題的時間忽略不計,任何時間都可以交題)。
另外 alice 知道 bob 是按 1,2,…,n1,2,…,n 的順序來依次做題,知道每道題自己需要的時間和 bob 需要的時間(即 aa 序列和 bb 序列)。
輸出 alice 最優策略下最多得幾分。
alice 和 bob 想題都不需要時間。
input
第一行乙個整數 t(1 \leq t \leq 10)t(1≤t≤10) 表示 tt 組資料。
每組資料第一行乙個整數 n (1 \leq n \leq 2000)n(1≤n≤2000) 表示題數。
第二行 nn 個整數,表示 a[1],a[2],…a[n](1 \leq a[i] \leq 1000000000)a[1],a[2],…an。
第三行 nn 個整數,表示 b[1],b[2],…b[n](1 \leq b[i] \leq 1000000000)b[1],b[2],…bn。
保證至多只有一組資料 n>100n>100。
output
對於每組資料,一行乙個整數表示答案。
sample input26
6 6 6 6 6 6
1 1 1 1 1 1
31 2 3
5 1 1
sample output13
樣例解釋
case 1 開場直接 rush 最後一題。
case 2 [0,1) 寫掉第一題,第 5 分鐘交;[1,3) 寫第二題第 6 分鐘交,[3,6) 寫第三題第 6 分鐘交。
思路:
博弈dp個人感覺都是最後都得歸結到乙個人的決策上去。
本題的b實際就可以當做他是一直在寫題,因為a題寫完前面的題可以囤起來,等b剛好寫完的時候再交。
考慮只有一道題,如果a[1
]≤b[
1]
a[1]≤b[1]
a[1]≤b
[1],a就可以拿到1分,否則0分。
考慮只有兩道題,如果a[1
]+a[
2]≤b
[1]+
b[2]
a[1]+a[2]≤b[1]+b[2]
a[1]+a
[2]≤
b[1]
+b[2
],則a可以拿到兩分。如果a[2
]≤b[
1]+b
[2
]a[2]≤b[1]+b[2]
a[2]≤b
[1]+
b[2]
或者a [1
]≤b[
1]
a[1]≤b[1]
a[1]≤b
[1]或者,則可以拿到1分。否則拿不到分。
所以問題可以簡化為前i道題,a題可以寫掉哪些題。那麼轉移就是對於第i
ii道題寫或者不寫。
則可以定義f[i
][j]
f[i][j]
f[i][j
]為前i道題a可以拿j道題分的最小時間。那麼只要f[i
−1][
j−1]
+a[i
]≤b[
1]+.
..+b
[i
]f[i-1][j-1]+a[i]≤b[1]+...+b[i]
f[i−1]
[j−1
]+a[
i]≤b
[1]+
...+
b[i]
,那就可以拿到第i
ii道題的分。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
typedef
long
long ll;
using
namespace std;
const
int maxn =
2e3+7;
const ll inf =
0x3f3f3f3f3f3f3f3f
;ll f[maxn]
[maxn]
;ll a[maxn]
,b[maxn]
;ll sum[maxn]
;int
main()
for(
int i =
1;i <= n;i++
)memset
(f,0x3f
,sizeof
(f))
;for
(int i =
0;i <= n;i++
)for
(int i =
1;i <= n;i++
) f[i]
[j]=
min(f[i]
[j],f[i -1]
[j]);}
}for
(int i = n;i >=
0;i--)}
}return0;
}
百度之星 初賽第二場 B題
怎麼說呢,只能說自己還不夠熟練,能力還不夠,細心成都還不夠吧。這樣的二分題目在poj的訓練計畫裡面有類似的題目,自己也是都刷了,可是在調這道題目的時候廢了老大的盡了,比賽結束後聽polla的一句思路 找出最大的t,如果按t分類,可分出1組,按0分類分出n組,二分列舉t然後利用並查集判斷分出多少種類。...
2019百度之星第二場初賽 A, B, C
a 度度熊與數字 直接暴力列舉v的因子 找到答案之後對答案排一下序輸出即可 include define ll long long using namespace std const int maxn 1005 int arr 1000 int arrr 1000 int factor int n ...
百度之星 初賽第二場 B題
怎麼說呢,只能說自己還不夠熟練,能力還不夠,細心成都還不夠吧。這樣的二分題目在poj的訓練計畫裡面有類似的題目,自己也是都刷了,可是在調這道題目的時候廢了老大的盡了,比賽結束後聽polla的一句思路 找出最大的t,如果按t分類,可分出1組,按0分類分出n組,二分列舉t然後利用並查集判斷分出多少種類。...