5.27 NOI 模拟
\(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 模拟的更多相关文章
- 5.30 NOI 模拟
$5.30\ NOI $模拟 高三大哥最后一次模拟考了,祝他们好运 \(T1\)装箱游戏 显然可以将四种字母之间的空缺当做状态枚举 那么这道题就很显然了 #include<bits/stdc++ ...
- 5.23 NOI 模拟
$5.23\ NOI $模拟 \(T1\)简单的计算几何题 \(zjr:\)我当时没改,那么自己看题解吧 倒是有个简单的随机化方法(能获得\(72pts,\)正确性未知)\(:\) 随机两条切椭圆的平 ...
- 5.6 NOI模拟
\(5.6\ NOI\)模拟 明天就母亲节了,给家里打了个电话(\(lj\ hsez\)断我电话的电,在宿舍打不了,只能用教练手机打了) 其实我不是很能看到自己的\(future,\)甚至看不到高三的 ...
- 5.4 NOI模拟
\(5.4\ NOI\)模拟 \(T1\) 想到分讨,但是暴力输出一下方案之后有很多特别的情况要讨论,就弃了... 假设\(a\)是原序列,\(b\)是我们得到的序列 设\(i\)是最长公共前缀,\( ...
- NOI模拟赛 Day1
[考完试不想说话系列] 他们都会做呢QAQ 我毛线也不会呢QAQ 悲伤ING 考试问题: 1.感觉不是很清醒,有点困╯﹏╰ 2.为啥总不按照计划来!!! 3.脑洞在哪里 4.把模拟赛当作真正的比赛,紧 ...
- NOI 模拟赛 #2
得分非常惨惨,半个小时写的纯暴力 70 分竟然拿了 rank 1... 如果 OYJason 和 wxjor 在可能会被爆踩吧 嘤 T1 欧拉子图 给一个无向图,如果一个边集的导出子图是一个欧拉回路, ...
- 【2018.12.10】NOI模拟赛3
题目 WZJ题解 大概就是全场就我写不过 $FFT$ 系列吧……自闭 T1 奶一口,下次再写不出这种 $NTT$ 裸题题目我就艹了自己 -_-||| 而且这跟我口胡的自创模拟题 $set1$ 的 $T ...
- 7.27 NOIP模拟测试9 随 (rand)+单(single)+题(problem)
T1 随 (rand) dp+矩阵优化+原根 看着题解懵了一晚上加一上午,最后还是看了DeepinC的博客才把暴力码出来,正解看得一知半解,循环矩阵也不太明白,先留坑吧.暴力里用二维矩阵快速幂会tle ...
- 6.28 NOI模拟赛 好题 状压dp 随机化
算是一道比较新颖的题目 尽管好像是两年前的省选模拟赛题目.. 对于20%的分数 可以进行爆搜,对于另外20%的数据 因为k很小所以考虑上状压dp. 观察最后答案是一个连通块 从而可以发现这个连通块必然 ...
随机推荐
- 使用 Flutter 与 Firebase 制作 I/O 弹球游戏
文/ Very Good Ventures 团队,5 月 11 日发表于 Flutter 官方博客 为了今年的 Google I/O 大会,Flutter 团队使用 Flutter 以及 Fireba ...
- 虚拟环境与django版本与视图层相关知识
目录 虚拟环境 django版本区别 视图函数返回值 JsonResponse对象 form表单上传文件 request方法 FBV与CBV CBV源码剖析 模板语法传值 传值方式 传值范围 虚拟环境 ...
- 一文带你看懂Java中的Lock锁底层AQS到底是如何实现的
前言 相信大家对Java中的Lock锁应该不会陌生,比如ReentrantLock,锁主要是用来解决解决多线程运行访问共享资源时的线程安全问题.那你是不是很好奇,这些Lock锁api是如何实现的呢?本 ...
- 「Java分享客栈」Nacos配置中心称王称霸,我Apollo一生也不弱于人!
前言 Apollo又称阿波罗配置中心,在前两年还是挺火的,但阿里SpringCloud套件席卷国内之后,nacos就成为了最被亲睐的分布式配置中心,nacos是配置中心和注册中心二合一的产品,单纯功能 ...
- Linux系列之linux访问windows文件
Linux永久挂载windows共享文件 Linux系统必须安装samba-client Linux服务器必须能访问到Windows的共享文件服务的(445端口) 1.Windows共享文件 2.测试 ...
- IE让我首次遭受了社会的毒打
2022年6月15日,微软终止对IE的支持,自此IE走入历史,可以说这是一个时代的终结. 自己在 2011 年刚从业时,IE 在国内的市场占有率可是遥遥领先的,下图来自于 StatCounter 网站 ...
- bat-命令行配置静态IP地址
查看连接名称ipconfig 打开命令提示符,输入netsh后回车 输入interface后回车 输入ip,回车 输入set address "连接名称" static 新IP地址 ...
- python删除Android应用及文件夹,就说牛不牛吧
写在前面的一些P话: 碌者劳其心力,懒人使用工具.程序员作为懒人推动社会进步,有目共睹. adb 已提供了开发者可以使用的全部工具,但是重复执行一系列adb命令也令人心烦,所以,如果业务需求固定,直接 ...
- NC207028 第k小数
NC207028 第k小数 题目 题目描述 给你一个长度为 \(n\) 的序列,求序列中第 \(k\) 小数的多少. 输入描述 多组输入,第一行读入一个整数 \(T\) 表示有 \(T\) 组数据. ...
- 【python基础】第19回 多层,有参装饰器 递归 二分法
本章内容概要 1. 多层装饰器 2. 有参装饰器 3. 递归函数 4. 算法(二分法) 本章内容详解 1. 多层装饰器 1.1 什么是多层装饰器 多层装饰器是从下往上依次执行,需要注意的是,被装饰的函 ...