ACM-ICPC 2018 南京赛区网络预赛 E题


ACM-ICPC 2018 南京赛区网络预赛 E题

题目链接: https://nanti.jisuanke.com/t/30994

Dlsj is competing in a contest with n (0 < n \le 20)n(0<n≤20) problems. And he knows the answer of all of these problems.

However, he can submit ii-th problem if and only if he has submitted (and passed, of course) s_isi problems, the p{i, 1}pi,1-th, p{i, 2}pi,2-th, ......, p{i, s_i}pi,si-th problem before.(0 < p{i, j} \le n,0 < j \le s_i,0 < i \le n)(0<pi,j≤n,0<j≤si,0<i≤n)After the submit of a problem, he has to wait for one minute, or cooling down time to submit another problem. As soon as the cooling down phase ended, he will submit his solution (and get "Accepted" of course) for the next problem he selected to solve or he will say that the contest is too easy and leave the arena.

"I wonder if I can leave the contest arena when the problems are too easy for me.""No problem."—— CCF NOI Problem set

If he submits and passes the ii-th problem on tt-th minute(or the tt-th problem he solve is problem ii), he can get t \times a_i + b_it×ai+bi points. (|a_i|, |b_i| \le 10^9)(∣ai∣,∣bi∣≤109).

Your task is to calculate the maximum number of points he can get in the contest.

Input

The first line of input contains an integer, nn, which is the number of problems.

Then follows nn lines, the ii-th line contains s_i + 3si+3 integers, a_i,b_i,s_i,p_1,p_2,...,p_{s_i}ai,bi,si,p1,p2,...,psias described in the description above.

Output

Output one line with one integer, the maximum number of points he can get in the contest.

Hint

In the first sample.

On the first minute, Dlsj submitted the first problem, and get 1 \times 5 + 6 = 111×5+6=11 points.

On the second minute, Dlsj submitted the second problem, and get 2 \times 4 + 5 = 132×4+5=13points.

On the third minute, Dlsj submitted the third problem, and get 3 \times 3 + 4 = 133×3+4=13 points.

On the forth minute, Dlsj submitted the forth problem, and get 4 \times 2 + 3 = 114×2+3=11 points.

On the fifth minute, Dlsj submitted the fifth problem, and get 5 \times 1 + 2 = 75×1+2=7 points.

So he can get 11+13+13+11+7=5511+13+13+11+7=55points in total.

In the second sample, you should note that he doesn‘t have to solve all the problems.

样例输入1复制

55 6 04 5 1 13 4 1 22 3 1 31 2 1 4

样例输出1复制

55

样例输入2复制

1-100 0 0

样例输出2复制

0

题目来源

ACM-ICPC 2018 南京赛区网络预赛

看到了n<20, 很显然就是要状态压缩了。

然后那个前提条件,其实就是状态转移时候的条件了,只要判断一下就可以了。

状态压缩就是用一个二进制数来表示当前的状态,这个数需要有n个二进制位,如果为0表示没有submit这个题,1表示submit了。

dp[i]表示到状态i获得的最多points. 根据i有多少1就知道现在的时间了(每分钟submit一个)。

具体看代码吧。

?
#include <bits/stdc++.h>
using namespace std;
?
?
int bit[22];
?
int a[22];
int b[22];
int state[22];
?
long long dp[1<<20];
int numbit[1<<20];
const long long INF = 1000000000000000LL;
?
int main() {
  bit[0] = 1;
  for (int i = 1; i < 22; i++)
    bit[i] = bit[i-1]<<1;
  numbit[0] = 0;
  for (int i = 1; i < bit[20]; i++) {
    numbit[i] = 1 + numbit[i&(i-1)];
  }
  int n;
  while(scanf("%d", &n) == 1) {
    for (int i = 0; i < n; i++) {
      scanf("%d%d", &a[i], &b[i]);
      int s;
      scanf("%d", &s);
      int tmp = 0;
      state[i] = 0;
      while (s--) {
        scanf("%d", &tmp);
        state[i] |= bit[tmp-1];
      }
    }
      dp[0] = 0;
      for (int i = 1; i < bit[n]; i++)dp[i] = -INF;
      long long ans = 0;
      for (int i = 0; i < bit[n]; i++) {
        if (dp[i] == -INF)continue;
        ans = max(ans, dp[i]);
        for (int j = 0; j < n; j++) {
          if (i & bit[j])continue;
          if ((i&state[j]) != state[j])continue;
          dp[i|bit[j]] = max(dp[i|bit[j]], dp[i] + (long long)(numbit[i]+1)*a[j] + b[j]);
        }
      }
      cout<<ans<<endl;
?
  }
  return 0;
}

  

https://kuangbin.github.io/2018/09/01/2018-ACM-ICPC-Nanjing-online-E/

原文地址:https://www.cnblogs.com/kuangbin/p/9571820.html

时间: 2024-10-09 08:38:45

ACM-ICPC 2018 南京赛区网络预赛 E题的相关文章

ACM-ICPC 2018 南京赛区网络预赛 做题记录

比赛的时候被J题卡常然后B题自闭最后G题没调完 5题gg 现在补题进度:6/12 A. 题解: 高考数学题,裂项完之后答案就是n!-1 (n!)%n=0,所以就是n-1 1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 int T; 5 ll n; 6 int main() 7 { 8 cin>>T; 9 while(T--) 10 { 11 cin>>n; 12 cout

ACM-ICPC 2018 南京赛区网络预赛 L题(分层最短路)

题目链接:https://nanti.jisuanke.com/t/31001 题目大意:给出一个含有n个点m条边的带权有向图,求1号顶点到n号顶点的最短路,可以使<=k条任意边的权值变为0. 样例输入 复制 1 5 6 1 1 2 2 1 3 4 2 4 3 3 4 1 3 5 6 4 5 2 样例输出 复制 3 解题思路:可以用两种做法,不过都差不多,应该算是同一种思路的不同写法.第一种是在建图时,将一个点拆成k个层次的点,应该总共有k+1层,每个相同层次的点按输入的边权连接,每个点可以向它

ACM-ICPC 2018 南京赛区网络预赛 Lpl and Energy-saving Lamps 线段树

目录 ACM-ICPC 2018 南京赛区网络预赛 Lpl and Energy-saving Lamps 线段树 题面 题意 思路 ACM-ICPC 2018 南京赛区网络预赛 Lpl and Energy-saving Lamps 线段树 题面 During tea-drinking, princess, amongst other things, asked why has such a good-natured and cute Dragon imprisoned Lpl in the

ACM-ICPC 2018 南京赛区网络预赛 J.Sum

Sum A square-free integer is an integer which is indivisible by any square number except 11. For example, 6 = 2 \cdot 36=2⋅3 is square-free, but 12 = 2^2 \cdot 312=22⋅3 is not, because 2^222 is a square number. Some integers could be decomposed into

ACM-ICPC 2018 南京赛区网络预赛 L. Magical Girl Haze

262144K There are NN cities in the country, and MM directional roads from uu to v(1\le u, v\le n)v(1≤u,v≤n). Every road has a distance c_ici?. Haze is a Magical Girl that lives in City 11, she can choose no more than KK roads and make their distances

计蒜客 ACM-ICPC 2018 南京赛区网络预赛 A. An Olympian Math Problem-数学公式题

A. An Olympian Math Problem 54.28% 1000ms 65536K Alice, a student of grade 66, is thinking about an Olympian Math problem, but she feels so despair that she cries. And her classmate, Bob, has no idea about the problem. Thus he wants you to help him.

ACM-ICPC 2018 焦作赛区网络预赛 H题 String and Times(SAM)

Now you have a string consists of uppercase letters, two integers AA and BB. We call a substring wonderful substring when the times it appears in that string is between AA and BB (A \le times \le BA≤times≤B). Can you calculate the number of wonderful

ACM-ICPC 2018 焦作赛区网络预赛 B题 Mathematical Curse

A prince of the Science Continent was imprisoned in a castle because of his contempt for mathematics when he was young, and was entangled in some mathematical curses. He studied hard until he reached adulthood and decided to use his knowledge to esca

ACM-ICPC 2018 焦作赛区网络预赛 L 题 Poor God Water

God Water likes to eat meat, fish and chocolate very much, but unfortunately, the doctor tells him that some sequence of eating will make them poisonous. Every hour, God Water will eat one kind of food among meat, fish and chocolate. If there are 33