20170606组队赛比赛总结

来源:互联网 发布:ggplot python 编辑:程序博客网 时间:2024/06/08 12:30

B

思路

  • 我们发现对于每个数只有 1<<10 种状态,直接Dp 即可
  • 没有想该题(甩锅)

C

思路

  • 同时由于题意,我们发现每个循环的上下界只会有一个被其他循环限制
  • 很容易发现每个循环可以形成一个拓扑序(或者树形的结构)
  • 那么,我们可以用Dp对状态进行量化,我们用Dp记录第i层(循环)次数(循环的次数)为j时的状态
  • 为了提高效率,我们可以用前缀和优化即用Dp[i][j]记录第i层次数小于等于j的答案
  • 转移的方程就很简单了
void dfs(int x){    for(int i=l[x];i<=r[x];i++)dp[x][i]=1;    for(int i=0;i<G[x].size();i++){        int y=G[x][i];        dfs(y);        for(int j=l[x];j<=r[x];j++){            int L=l[y],R=r[y];            if(cmd[y]==1)L=j;            if(cmd[y]==2)R=j;            if(L<=R)Pro(dp[x][i],dp[y][R]-dp[y][L-1]+P);            else dp[x][j]=0;        }    }    for(int i=l[x];i<=r[x];i++)Add(dp[x][i],dp[x][i-1]);}