# 8.19考试总结

8.19考试总结

预计得分:230 实际得分:180 丢分:50

真的是哪题不拍挂哪题

T1

方差的式子是
\[ \frac{\sum a_i^2}{n} - \frac{(\sum a_i)^2}{n^2} \]
题目中式子其实要求的是
\[ n\sum a_i^2-(\sum a_i)^2 \]
想DP发现这两个东西不好同时搞

我们就DP一维记录一维

记录肯定考虑记录值域最小的

我们就设\(f_{i,j,k}\)他去表示

到了\((i,j)\)这个点

\(\sum a_i\)的值为\(k\)的最大的\(\sum a_i^2\)

转移显然

#include<cstdio>
#include<iostream>
#include<queue>
#include<algorithm>
#include<cstring>
#include<cctype>
#include<vector>
#include<ctime>
#include<cmath>
#define LL long long
#define pii pair<int,int>
#define mk make_pair
#define fi first
#define se second
using namespace std;
const int N = 35;
const int M = 1835;
int f[N][N][M];
int a[N][N];
int n,m;int num = 0;
inline int read(){
    int v = 0,c = 1;char ch = getchar();
    while(!isdigit(ch)){
        if(ch == '-') c = -1;
        ch = getchar();
    }
    while(isdigit(ch)){
        v = v * 10 + ch - 48;
        ch = getchar();
    }
    return v * c;
}
int main(){
//  freopen("path.in","r",stdin);
    int T = read();
    while(T--){
        memset(f,0x3f,sizeof(f));
        n = read(),m = read();
        for(int i = 1;i <= n;++i)
            for(int j = 1;j <= m;++j) a[i][j] = read();//cout << "GG" << endl;
    //  memset(f,0x3f,sizeof(f));
        f[1][1][a[1][1]] = a[1][1] * a[1][1];
        for(int i = 1;i <= n;++i){
            for(int j = 1;j <= m;++j){
                for(int k = 0;k <= (i + j - 1) * 30;++k){
                    if(k + a[i + 1][j] <= (i + j) * 30) f[i + 1][j][k + a[i + 1][j]] = min(f[i + 1][j][k + a[i + 1][j]],
                    f[i][j][k] + a[i + 1][j] * a[i + 1][j]);
                    if(k + a[i][j + 1] <= (i + j) * 30) f[i][j + 1][k + a[i][j + 1]] = min(f[i][j + 1][k + a[i][j + 1]],
                    f[i][j][k] + a[i][j + 1] * a[i][j + 1]);  
//                  if(k + a[i + 1][j] > (i + j) * 30)      
                }
            }
        }
        LL ans = 0x3f3f3f3f;
        for(int i = 0;i <= 1800;++i)  ans = min(ans,1ll * (n + m - 1) * f[n][m][i] - i * i);
         
        printf("Case #%d: %lld\n",++num,ans);
    }
    return 0;
}

T2

挂烂了QAQ

考虑优雅的暴力建边

mGVXpF.png

这是暴力建边方式时间复杂度\(O(nm)\)

正确性显然

发现每次都是一个点向一个区间连边,直接线段树优化这个过程

而由于边权只有\(1/0\)

最短路径可以\(01\)bfs

关于线段树优化建图的本质,这里就简单的说一下

本质是维护了两颗线段树,一颗表示入边另外一颗表示出边

区间操作就可以通过虚点来进行连接

#include<cstdio>
#include<iostream>
#include<queue>
#include<algorithm>
#include<cstring>
#include<cctype>
#include<vector>
#include<ctime>
#include<cmath>
#include<deque>
#define LL long long
#define pii pair<int,int>
#define mk make_pair
#define fi first
#define se second
using namespace std;
const int N = 1e6 + 3;
int pos[N];
int n,m,s;
int whe;
struct tree{
    int head[N << 2];
    int dis[N << 2];
    int rt1,rt2,tot,t;
    struct node{
        int lc;
        int rc;
    }a[N << 2];
    struct edge{
        int to;
        int nxt;
        int data;
    }e[N * 35];
    inline void add(int x,int y,int z){
        e[++tot].to = y;
        e[tot].data = z;
        e[tot].nxt = head[x];
        head[x] = tot;
    }
    inline void build(int &u,int l,int r,bool flag){
        if(!u) u = ++t;
        if(l == r) {if(!flag) pos[l] = u;return;}
        int mid = (l + r) >> 1;
        build(a[u].lc,l,mid,flag);build(a[u].rc,mid + 1,r,flag);
        if(flag){
            add(a[u].lc,u,0);
            add(a[u].rc,u,0);   
        }
        else{
            add(u,a[u].lc,0);
            add(u,a[u].rc,0);   
        }
    }
    inline void updata(int u,int l,int r,int ll,int rr,int p,bool flag){
        if(l == ll && r == rr){
            if(flag) add(u,p,0);
            else add(p,u,0);
            return ;
        }
        int mid = (l + r) >> 1;
        if(rr <= mid) updata(a[u].lc,l,mid,ll,rr,p,flag);
        else if(ll > mid) updata(a[u].rc,mid + 1,r,ll,rr,p,flag);
        else{
            updata(a[u].lc,l,mid,ll,mid,p,flag);
            updata(a[u].rc,mid + 1,r,mid + 1,rr,p,flag);
        }
    }
    inline void ADD(int r1,int r2,int l,int r){
        if(l == r){
            add(r2,r1,0);
            return ; 
        }
        int mid = (l + r) >> 1;
        ADD(a[r1].lc,a[r2].lc,l,mid);ADD(a[r1].rc,a[r2].rc,mid + 1,r);
    }
    inline void link(int l,int r,int ll,int rr){
        updata(rt1,1,n,l,r,++t,1);
        updata(rt2,1,n,ll,rr,++t,0);
        add(t - 1,t,1); 
    }
    inline void bfs(int x){
        memset(dis,0x3f,sizeof(dis));
        dis[x] = 0;
        deque <int> q;
        q.push_back(x);
        while(!q.empty()){
            int k = q.front();
            q.pop_front();
            for(int i = head[k];i;i = e[i].nxt){
                int y = e[i].to;        
                if(dis[y] > dis[k] + e[i].data){
                    dis[y] = dis[k] + e[i].data;
                    if(e[i].data) q.push_back(y);
                    else q.push_front(y);   
                }
            }
        }
        for(int i = 1;i <= n;++i) printf("%d\n",dis[pos[i]]);
    }
}T;
inline int read(){
    int v = 0,c = 1;char ch = getchar();
    while(!isdigit(ch)){
        if(ch == '-') c = -1;
        ch = getchar();
    }
    while(isdigit(ch)){
        v = v * 10 + ch - 48;
        ch = getchar();
    }
    return v * c;
}
int main(){
    n = read(),m = read(),s = read();
    T.build(T.rt1,1,n,1);
    T.build(T.rt2,1,n,0);
    T.ADD(T.rt1,T.rt2,1,n);
    for(int i = 1;i <= m;++i){
        int l = read(),r = read(),ll = read(),rr = read();
        T.link(l,r,ll,rr);
        T.link(ll,rr,l,r);
    }
//  printf("%d\n",pos[s]);
    T.bfs(pos[s]);
    return 0;
}

T3

\(n = 1000\)被我\(n^3\)卡过去了可还行

我到现在还是怀疑题解的思路是错的,

说一下另外一个\(n^2\)做法

把矩阵查分两次之后

就变成了求最大的全\(0\)子矩阵(可能细节和边界要特殊处理)

这个直接悬线法求就好了

转载于:https://www.cnblogs.com/wyxdrqc/p/11381829.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
要在CentOS 7上安装MySQL 8.19,您可以按照以下步骤操作: 1. 首先,您需要下载MySQL 8.19的压缩包,并将其解压缩到/usr/local/目录下。您可以使用以下命令将解压得到的文件移动到/usr/local/目录,并重新命名为mysql: ``` mv mysql-8.0.19-linux-glibc2.12-x86_64 /usr/local/mysql ``` 引用 2. 接下来,您需要修改/usr/local/mysql/目录的权限,以确保MySQL能够正常运行。您可以使用以下命令更改目录的所有者和组为mysql: ``` chown -R mysql.mysql /usr/local/mysql/ ``` 引用 3. 之后,您可以将MySQL的启动脚本复制到/etc/init.d/目录中,以便MySQL可以作为服务启动和停止。您可以使用以下命令执行此操作: ``` cp ../support-files/mysql.server /etc/init.d/mysqld ``` 引用 完成上述步骤后,您就成功安装了MySQL 8.19。您可以使用适当的命令启动、停止和管理MySQL服务。请记住,这只是安装MySQL的基本步骤,您可能需要根据您的具体需求进行其他配置和设置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [centos7安装MySQL Community Server 8.0.19](https://blog.csdn.net/resuper0/article/details/104442933)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值