zoukankan      html  css  js  c++  java
  • CDQZ集训DAY10 日记

      又一次跪了,跪在了神奇的数据范围上。

      T1上来打完暴力之后觉得是数据结构题,像三维偏序,于是开始往各种数据结构上想,主席树,线段树+calc,平衡树,树套树,CDQ……最终在经过一番思考之后选择去打CDQ,打完之后自己拍了一下,发现我的想法是错的,考虑了一下转场。T2好像又是原题,打完暴力之后开始回忆,只记得答案和期望无关,XYZ讲过,卡区间去做,然而细节记不住了。T3一开始还以为是子串,觉得还挺容易,结果一看是子序列,打完暴力就跪了。纠结了一下去打T1,又用了半个小时打了一整套线段树套SPLAY,打完调完发现也行不通,痛苦ing……最后憋住劲查出来了vector没调库……

      下午发现分少的可怜,T1暴力65分,我虽然打了,但是由于我当时不知道该不该放那个CDQ的错解骗分,只将暴力限定在了2000以内,然而题目描述里小于2000的只有30分啊,虽然常数小但是没这么坑人的啊!

      讲课仍然不错,听的还是挺明白的,除了四边形不等式优化。

      晚上接着打插头DP,然而感到了收杀头DP支配的恐惧……一晚上打一道插头DP都没调完。话说3进制到底怎么玩??

     1 #include<iostream>
     2 #include<cmath>
     3 #include<vector>
     4 #include<cstdio>
     5 #include<cstdlib>
     6 #include<cstring>
     7 #include<algorithm>
     8 #define N 9
     9 #define M 105
    10 using namespace std;
    11 int n,m;
    12 int ma[M][M],b[M];
    13 int f[M][N][3000];
    14 int zt[3000][15],xp[M];
    15 int main()
    16 {
    17     scanf("%d%d",&m,&n);
    18     for(int i=1;i<=n;i++)
    19     {
    20         for(int j=1;j<=m;j++)
    21         {
    22             scanf("%d",&ma[i][j]);
    23         }
    24     }
    25     xp[0]=1;
    26     for(int i=1;i<=m+1;i++)
    27     {
    28         xp[i]=xp[i-1]*3;
    29     }
    30     for(int i=0;i<xp[m+1];i++) b[i]=i%3;
    31     int ans=-0x7fffffff;
    32     for(int i=1;i<=n;i++)
    33     {
    34         for(int j=1;j<=m;j++)
    35         {
    36             int x=xp[j-1],y=xp[j];
    37             for(int k=0;k<xp[m+1];k++)
    38             {
    39                 int p=b[k/x],q=b[k/y],t=k-x*p-y*q;
    40                 if(!p&&!q)
    41                 {
    42                     f[i][j][k]=max(f[i][j-1][k],f[i][j][k]);
    43                     f[i][j][k+x+(y<<1)]=max(f[i][j][k+x+(y<<1)],f[i][j-1][k]+ma[i][j]);
    44                 }
    45                 else if((!p&&q==1)||(!q&&p==1))
    46                 {
    47                     f[i][j][t+x]=max(f[i][j][t+x],f[i][j-1][k]+ma[i][j]);
    48                     f[i][j][t+y]=max(f[i][j][t+y],f[i][j-1][k]+ma[i][j]);
    49                 }
    50                 else if((!p&&q==2)||(!q&&p==2))
    51                 {
    52                     f[i][j][t+(x<<1)]=max(f[i][j][t+(x<<1)],f[i][j-1][k]+ma[i][j]);
    53                     f[i][j][t+(y<<1)]=max(f[i][j][t+(y<<1)],f[i][j-1][k]+ma[i][j]);
    54                 }
    55                 else if(p==1&&q==2&&!t&&ans<f[i][j-1][k]+ma[i][j]) ans=f[i][j-1][k]+ma[i][j],cout<<i<<' '<<j<<' '<<ans<<endl;
    56                 else if(p==2&&q==1) f[i][j][t]=max(f[i][j][t],f[i][j-1][k]+ma[i][j]);
    57                 else if(p==1&&q==1)
    58                 {
    59                     int u,tmp;
    60                     for(tmp=0,u=j+1;u<=m&&tmp>=0;tmp+=(b[t/xp[u]]==1)-(b[t/xp[u]]==2),u++);
    61                     u--;
    62                     f[i][j][t-xp[u]]=max(f[i][j][t-xp[u]],f[i][j-1][k]+ma[i][j]);
    63                 }
    64                 else if(p==2&&q==2)
    65                 {
    66                     int u,tmp;
    67                     for(tmp=0,u=j-2;u>=0&&tmp>=0;tmp+=(b[t/xp[u]]==2)-(b[t/xp[u]]==1),u--);
    68                     u++;
    69                     f[i][j][t+xp[u]]=max(f[i][j][t+xp[u]],f[i][j-1][k]+ma[i][j]);
    70                 }
    71             }
    72         }
    73         for(int j=0;j<xp[m];j++) if(b[j]==0)f[i+1][0][j/3]=f[i][m][j];
    74     }
    75     printf("%d
    ",ans);
    76     return 0;
    77 }
    存一个代码
  • 相关阅读:
    Angular Universal 学习笔记
    SAP Spartacus 如何获得当前渲染页面的 CMS 元数据
    Angular 服务器端渲染的学习笔记(二)
    Angular 服务器端渲染的学习笔记(一)
    第三方外部 Saas提供商如何跟使用 SAP 系统的客户进行对接接口集成
    如何从 SAP Spartacus Product Detail 页面,找到其 Angular 实现 Component 的位置
    具备自动刷新功能的 SAP ABAP ALV 报表
    C++学习目录
    c--条件编译
    c--文件读写--二进制
  • 原文地址:https://www.cnblogs.com/liutianrui/p/8137915.html
Copyright © 2011-2022 走看看