\(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. MySQL(8) - MySQL的事务机制

    MySQL数据库的事务机制 1.1.事务的概念和特性 1.2.事务的隔离级别 repeatable read是mysql默认的事务隔离级别 #事务A #事务A,临时修改工资,未commit, STAR ...

  2. arts-week10

    Algorithm 905. Sort Array By Parity - LeetCode Review Who's Afraid of the Big Bad Preloader? 一文读懂前端缓 ...

  3. EditText简单登陆界面制作

  4. IDEA windows版本快捷键

    使用本快捷键前,可以在idea使用下面方法确认版本! Ctrl 快捷键 介绍 Ctrl + F 在当前文件进行文本查找 (必备)Ctrl + R 在当前文件进行文本替换 (必备) Ctrl + Z 撤 ...

  5. (C++)读取一个输入的int型十进制数字的位数,并正序输出每个位上的值(不同数位的值用1个空格字符间隔)

    1 /* 2 程序功能:读取一个输入的int型十进制数字的位数,并正序输出每个位上的值(不同数位的值用1个空格字符间隔). 3 例如:当输入985这个数字时,显示如下信息: 4 985是一个3位数字! ...

  6. Redis集群搭建 三主三从

    Redis集群介绍 Redis 是一个开源的 key-value 存储系统,由于出众的性能,大部分互联网企业都用来做服务器端缓存.Redis在3.0版本之前只支持单实例模式 虽然支持主从模式,哨兵模式 ...

  7. net core天马行空系列-微服务篇:全声明式http客户端feign快速接入微服务中心nacos

    1.前言 hi,大家好,我是三合,距离上一篇博客已经过去了整整两年,这两年里,博主通关了<人生>这个游戏里的两大关卡,买房和结婚.最近闲了下来,那么当然要继续写博客了,今天这篇博客的主要内 ...

  8. ElasticSearch7.3学习(三十)----ES7.X SQL新特性解析及使用Java api实现sql功能

    一.ES7 sql新特性 1.1 数据准备 创建索引及映射 建立价格.颜色.品牌.售卖日期 四个字段 PUT /tvs PUT /tvs/_mapping { "properties&quo ...

  9. 【视频】k8s套娃开发调试dapr应用 - 在6月11日【开源云原生开发者日】上的演示

    这篇博客是在2022年6月11日的[开源云原生]大会上的演讲中的演示部分.k8s集群套娃(嵌套)是指在一个k8s的pod中运行另外一个k8s集群,这想法看上去很疯狂,实际上非常实用. k8s集群套娃( ...

  10. C语言学习之我见-strlen()字符串长度函数

    strlen()函数,负责给出字符串的长度.注意是字符串的长度,不是字符数组的长度. (1)函数原型: size_t __cdecl strlen(const char *_Str); (2)头文件` ...