题目描述
俄罗斯套娃是俄罗斯特产的木制玩具,一般由多个一样图案的空心木娃娃一个套一个组成,最多可达十多个,通常为圆柱形,底部平坦可以直立。颜色有红色,蓝色,绿色,紫色等。最普通的图案是一个穿着俄罗斯民族服装的姑娘,叫做“玛特罗什卡”,这也成为这种娃娃的通称。
输入描述:
输入第一行为一个整数?(1 ≤ ? ≤ 25),表示一共有?组测试数据。 对于每组测试数据: 第一行有两个整数?,?(1 ≤ ?,? ≤ 105),分别表示正方体和球体的木娃娃数。 第二行有?个整数,其中第?个整数??(1 ≤ ?? ≤ 109)代表第?个正方体娃娃的边长。 第二行有?个整数,其中第?个整数??(1 ≤ ?? ≤ 109)代表第?个球形娃娃的半径。
输出描述:
输出一个正整数?,表示组成的套娃的层数。
示例1
输入
13 42 4 67 5 3 1
输出
5
说明
对于样例,套娃分别由半径为7的球形、半径为5的球形、边长为4的正方体、边长为2的正方体、半径为1 的球形的木娃娃组成,一共5层。
题解
$dp$。
可以构造出一个$DAG$,然后看最长路的长度就可以了。
#includeusing namespace std;const int maxn = 8e5 + 10;int T;int n, m;long long a[maxn], b[maxn];int dp[maxn];int h[maxn];int to[maxn];int nx[maxn];int sz;int in[maxn];void add(int x, int y) { // cout << x << " -> " << y <