\(T1\)约定

比较水的\(dp\)题

上午想到了用区间\(dp\)求解,复杂度\(O(n^5),\)貌似没开\(long\ long\)就爆掉了

正解还是比较好想的,直接枚举从何时互不影响然后转移即可,复杂度\(O(n^3)\)

#include<bits/stdc++.h>
#define int long long
#define MAXN 405
using namespace std;
int ord[MAXN][MAXN],dp[MAXN][MAXN],l[MAXN][MAXN],r[MAXN][MAXN],a[MAXN],n;
int Dis(int x,int y)
{
if(x>y) swap(x,y);
return a[y]-a[x];
}
int Val(int x,int y)
{
return Dis(x,y)*floor(sqrt(Dis(x,y)));
}
signed main()
{
scanf("%lld",&n);
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
}
for(int i=1;i<=n;i++)
{
vector<pair<int,int> >tmp;
for(int j=1;j<=n;j++)
{
tmp.push_back(make_pair(Val(i,j),j));
}
sort(tmp.begin(),tmp.end());
for(int j=0;j<n;j++)
{
ord[i][j]=tmp[j].second;
}
}
memset(l,0x3f,sizeof(l));
memset(r,0x3f,sizeof(r));
memset(dp,0x3f,sizeof(dp));
for(int i=0;i<=n;i++)
{
l[1][i]=r[n][i]=0;//l,r表示poz走到1,n的代价
}
for(int i=2;i<=n;i++)
{
for(int j=1;j<n;j++)
{
for(int ls=1;ls<i;ls++)
{
l[i][j]=min(l[i][j],l[ls][j-1]+Val(i,ls));
}
}
}
for(int i=n-1;i>=1;i--)
{
for(int j=1;j<n;j++)
{
for(int ls=i+1;ls<=n;ls++)
{
r[i][j]=min(r[i][j],r[ls][j-1]+Val(i,ls));
}
}
}
for(int i=1;i<n;i++)
{
for(int st=1;st<=n;st++)
{
int L=st,R=st;
for(int nxt=1;nxt<n;nxt++)
{
int now=ord[st][nxt];
L=min(L,now); R=max(R,now);
dp[st][i]=min(dp[st][i],Val(st,now)+l[L][i-1]+r[R][i-1]);
dp[st][i]=min(dp[st][i],Val(st,now)+dp[now][i-1]);
}
}
}
for(int st=1;st<=n;st++)
{
for(int i=1;i<n;i++)
{
cout<<dp[st][i]<<" ";
}
cout<<"\n";
}
}

\(T2\ because\)

首先\(sto\)谭哥\(orz\)

运用高中物理知识

我们设我们直线向量为\(Base=(x_1,x_2,x_3...)\)

我们要求的式子是

\(\sum |vec_i|^2-(vec_i*Base)^2\)

\(=\sum |vec_i|^2-\sum (vec_i*Base)^2\)

最后的形式大概是一个高维函数的形式,我们每次随机一个初始点,我们对这个位置\(Seek\ partial\ derivatives\),采用\(Gradient\ descent\ method\)进行\(1000\)次\(iterate\)即可保证精度误低于\(1\times 10^{-9}\)

//sto 梯度下降+偏导 tql
#include<bits/stdc++.h>
#define MAXN 1005
#define MAXT 1000
#define MAXD 10
using namespace std;
int n,d,st[MAXN][MAXD];
double poi[MAXD],Mid2[MAXD],Mid1[MAXD],vec_x[MAXN];
int main(){
scanf("%d%d",&n,&d);
for(int i=1;i<=n;i++)
{
for(int j=0;j<d;j++)
{
scanf("%d",&st[i][j]);//输入每个向量
}
}
default_random_engine e(time(0));
uniform_real_distribution<double> u(-1,1);
for(int i=0;i<d;i++)
{
poi[i]=u(e);
}
double T=1.0;
for(int t=0;t<MAXT;t++)
{
memset(vec_x,0,sizeof(vec_x));
for(int i=1;i<=n;i++)
{
for(int j=0;j<d;j++)
{
vec_x[i]+=poi[j]*st[i][j];
//计算每个与直线向量的点乘
}
}
for(int i=0;i<d;i++)
{
double res1=0,res2=0;
//枚举维度
for(int j=1;j<=n;j++)//枚举向量
{
//在一个维度上的导,把其他维度看成常数,对这个维度求导
//这个维度的偏导,发现把平方拆一下就是这个式子了
res1+=2*st[j][i]*vec_x[j];
res2+=vec_x[j]*vec_x[j];
}
Mid2[i]=res1+res2*2*poi[i];//这个就是每个维度的在这个位置的偏导
}
for(int i=0;i<d;i++)
{
Mid1[i]=0.1*Mid1[i]+T*Mid2[i];
//这个就是那个nb的梯度下降法,移动的位置就是
//在原来的基础上在加一点
}
for(int i=0;i<d;i++)
{
poi[i]+=Mid1[i];
//移动
}
double res=0;
for(int i=0;i<d;i++)
{
res+=poi[i]*poi[i];
//相量长度
}
res=sqrt(res);
for(int i=0;i<d;i++)
{
poi[i]/=res;
//变成单位向量
}
T*=0.987654321;
}
double res=0;
for(int i=1;i<=n;i++)
{
for(int j=0;j<d;j++)
{
res+=st[i][j]*st[i][j];
//式子的第一部分
}
}
for(int i=1;i<=n;i++)
{
double vec_x=0;
for(int j=0;j<d;j++)
{
vec_x+=st[i][j]*poi[j];
//式子的第二部分
}
res-=vec_x*vec_x;
}
printf("%.10f\n",res);
}

\(T3\)恋歌

\(zjr:\)你们可以去问\(myh,\)这道题当时没人改

\(so,\)这道题咕了

5.27 NOI 模拟的更多相关文章

  1. 5.30 NOI 模拟

    $5.30\ NOI $模拟 高三大哥最后一次模拟考了,祝他们好运 \(T1\)装箱游戏 显然可以将四种字母之间的空缺当做状态枚举 那么这道题就很显然了 #include<bits/stdc++ ...

  2. 5.23 NOI 模拟

    $5.23\ NOI $模拟 \(T1\)简单的计算几何题 \(zjr:\)我当时没改,那么自己看题解吧 倒是有个简单的随机化方法(能获得\(72pts,\)正确性未知)\(:\) 随机两条切椭圆的平 ...

  3. 5.6 NOI模拟

    \(5.6\ NOI\)模拟 明天就母亲节了,给家里打了个电话(\(lj\ hsez\)断我电话的电,在宿舍打不了,只能用教练手机打了) 其实我不是很能看到自己的\(future,\)甚至看不到高三的 ...

  4. 5.4 NOI模拟

    \(5.4\ NOI\)模拟 \(T1\) 想到分讨,但是暴力输出一下方案之后有很多特别的情况要讨论,就弃了... 假设\(a\)是原序列,\(b\)是我们得到的序列 设\(i\)是最长公共前缀,\( ...

  5. NOI模拟赛 Day1

    [考完试不想说话系列] 他们都会做呢QAQ 我毛线也不会呢QAQ 悲伤ING 考试问题: 1.感觉不是很清醒,有点困╯﹏╰ 2.为啥总不按照计划来!!! 3.脑洞在哪里 4.把模拟赛当作真正的比赛,紧 ...

  6. NOI 模拟赛 #2

    得分非常惨惨,半个小时写的纯暴力 70 分竟然拿了 rank 1... 如果 OYJason 和 wxjor 在可能会被爆踩吧 嘤 T1 欧拉子图 给一个无向图,如果一个边集的导出子图是一个欧拉回路, ...

  7. 【2018.12.10】NOI模拟赛3

    题目 WZJ题解 大概就是全场就我写不过 $FFT$ 系列吧……自闭 T1 奶一口,下次再写不出这种 $NTT$ 裸题题目我就艹了自己 -_-||| 而且这跟我口胡的自创模拟题 $set1$ 的 $T ...

  8. 7.27 NOIP模拟测试9 随 (rand)+单(single)+题(problem)

    T1 随 (rand) dp+矩阵优化+原根 看着题解懵了一晚上加一上午,最后还是看了DeepinC的博客才把暴力码出来,正解看得一知半解,循环矩阵也不太明白,先留坑吧.暴力里用二维矩阵快速幂会tle ...

  9. 6.28 NOI模拟赛 好题 状压dp 随机化

    算是一道比较新颖的题目 尽管好像是两年前的省选模拟赛题目.. 对于20%的分数 可以进行爆搜,对于另外20%的数据 因为k很小所以考虑上状压dp. 观察最后答案是一个连通块 从而可以发现这个连通块必然 ...

随机推荐

  1. 使用 Flutter 与 Firebase 制作 I/O 弹球游戏

    文/ Very Good Ventures 团队,5 月 11 日发表于 Flutter 官方博客 为了今年的 Google I/O 大会,Flutter 团队使用 Flutter 以及 Fireba ...

  2. 虚拟环境与django版本与视图层相关知识

    目录 虚拟环境 django版本区别 视图函数返回值 JsonResponse对象 form表单上传文件 request方法 FBV与CBV CBV源码剖析 模板语法传值 传值方式 传值范围 虚拟环境 ...

  3. 一文带你看懂Java中的Lock锁底层AQS到底是如何实现的

    前言 相信大家对Java中的Lock锁应该不会陌生,比如ReentrantLock,锁主要是用来解决解决多线程运行访问共享资源时的线程安全问题.那你是不是很好奇,这些Lock锁api是如何实现的呢?本 ...

  4. 「Java分享客栈」Nacos配置中心称王称霸,我Apollo一生也不弱于人!

    前言 Apollo又称阿波罗配置中心,在前两年还是挺火的,但阿里SpringCloud套件席卷国内之后,nacos就成为了最被亲睐的分布式配置中心,nacos是配置中心和注册中心二合一的产品,单纯功能 ...

  5. Linux系列之linux访问windows文件

    Linux永久挂载windows共享文件 Linux系统必须安装samba-client Linux服务器必须能访问到Windows的共享文件服务的(445端口) 1.Windows共享文件 2.测试 ...

  6. IE让我首次遭受了社会的毒打

    2022年6月15日,微软终止对IE的支持,自此IE走入历史,可以说这是一个时代的终结. 自己在 2011 年刚从业时,IE 在国内的市场占有率可是遥遥领先的,下图来自于 StatCounter 网站 ...

  7. bat-命令行配置静态IP地址

    查看连接名称ipconfig 打开命令提示符,输入netsh后回车 输入interface后回车 输入ip,回车 输入set address "连接名称" static 新IP地址 ...

  8. python删除Android应用及文件夹,就说牛不牛吧

    写在前面的一些P话: 碌者劳其心力,懒人使用工具.程序员作为懒人推动社会进步,有目共睹. adb 已提供了开发者可以使用的全部工具,但是重复执行一系列adb命令也令人心烦,所以,如果业务需求固定,直接 ...

  9. NC207028 第k小数

    NC207028 第k小数 题目 题目描述 给你一个长度为 \(n\) 的序列,求序列中第 \(k\) 小数的多少. 输入描述 多组输入,第一行读入一个整数 \(T\) 表示有 \(T\) 组数据. ...

  10. 【python基础】第19回 多层,有参装饰器 递归 二分法

    本章内容概要 1. 多层装饰器 2. 有参装饰器 3. 递归函数 4. 算法(二分法) 本章内容详解 1. 多层装饰器 1.1 什么是多层装饰器 多层装饰器是从下往上依次执行,需要注意的是,被装饰的函 ...