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. 观察最后答案是一个连通块 从而可以发现这个连通块必然 ...
随机推荐
- data:image字符转byte[]
var data = "data:image/bmp;base64,Qk3aHwAAAAAAADYAAAAoAAAAZAAAABsAAAABABgAAAAAAKQfAAAAAQAAAAEAA ...
- 好客租房57-props深入(4props的默认值)
1给props设置默认值 //导入react import React from 'react' import ReactDOM from 'react-dom' import ...
- 以圆类 Circle 为基础设计球类 Sphere
学习内容:实验二以圆类 Circle 为基础设计球类 Sphere 代码示例: import java.util.Scanner; class Point{ private double x; pri ...
- 06vim --- gcc库的制作及使用
VIM 命令模式下的操作 保存退出 快捷键 操作 ZZ 保存退出 代码格式化 快捷键 操作 gg=G 代码的格式化 光标移动(键盘上下左右键课代替) 快捷键 操作 h 光标左移 j 光标下移 k 光标 ...
- 关于基础RMQ——ST算法
RMQ,Range Maximum/Minimum Query,顾名思义,就是询问某个区间内的最大值或最小值,今天我主要记录的是其求解方法--ST算法 相对于线段树,它的运行速度会快很多,可以做到O( ...
- 免申请直接用上 IDEA 新 UI,只需要这三步配置
早上给大家介绍了IDEA官方宣布正在开发一套全新的UI,但目前是预览版需要申请才能体验. 随后马上就有网友分享了,不需要申请直接就能激活体验的方法. 本期视频:https://www.bilibili ...
- [BZOJ5449] 序列
题目链接:序列 Description 给定一个\(1\)~\(n\)的排列x,每次你可以将 \(x_1, x_2, ..., x_i\) 翻转. 你需要求出将序列变为升序的最小操作次数. 多组数据. ...
- Java_循环结构
目录 while循环 do...while循环 for循环 for循环嵌套 增强for循环 打印三角形 Debug 视频 while循环 while(布尔表达式){ //循环内容 } //死循环 wh ...
- Python列表推导式,字典推导式,元组推导式
参考:https://blog.csdn.net/A_Tu_daddy/article/details/105051821 my_list = [ [[1, 2, 3], [4, 5, 6]] ] f ...
- 158_模型_Power BI 使用 DAX + SVG 打通制作商业图表几乎所有可能
158_模型_Power BI 使用 DAX + SVG 打通制作商业图表几乎所有可能 一.背景 最近对 Power BI 中使用 SVG 比较感兴趣,今天我们使用 DAX + SVG 复刻一下 Ze ...