[置顶] NOIP2017游记+题解+标程
2017-11-13 12:24
351 查看
洛谷题目链接
题解和标程在后面(是在day20的后面,day1和day2里面的是游记不是题解!)
因为今年题目难度和风格太不友善,就不每一题分别写题解了
除了d2t3队列,点击进入
回家休息一下(猩球大战3挺好看的)
晚上去广州
这次不在六中比赛,换到了二中
区别在于,六中可以在考场的窗外看到广州塔,二中外面全是山
二中在萝岗区,是个新区,新到晚上想出去玩,都只有一个地方可以去,摩拜也找不到,路灯什么的都没装。
趁着酒店搞消防演习停电,找到理由去万达走了一圈
毕竟是四星级酒店
早餐也很不错,基本上想得到的都有
提前十五分钟进考场,转了几圈,没有我的位置?
直到快开始才给了我一个备用机
然后我惊奇的发现,我的备用机是win7,6代i5,8G,其他人的都是XP!!
rp++
然后不给试机?
那提前有什么用?
开始看第一题
啊!!!NOIPD1t1考数论??
然后我在草稿纸上写了ax+by=c
然后懵逼了好一会
算了先过
第二题是循环模拟,不久前做过一道题,那个要算具体循环次数,这题还是很简单的,秒掉
再看第三题
要求路程少于一个距离的路径数量
又懵逼了许久
然后猛然发现他的k只有50,意思就是最多求比最短路长50的路
那直接拆点不就行了吗?
切掉
回去看第一题
又看了许久,已经9:10了
我不敢再看了,赶紧打了个暴力,顺便找一下规律
打了个表,好像很有规律啊
然后仔细看了看,不就是n*m-n-m吗?
于是用暴力验证这个规律
好像是对的,那第一题意外切掉
去打第二题,c++字符串处理比较麻烦,调试也花了一点时间,但在10:10之前,大样例也过了
第三题先码了个spfa
然后复制一遍,加上k这个限制
测试样例,错了
接着我发现这种做法好像有错误,在累加方案的时候可能会算重
怎么办??先上个厕所冷静一下
回来之后发现拓扑排序一下就好了
迅速加上拓扑排序(说是迅速,打完已经十一点了)
调过小样例,又花了十分钟
试大样例,没过!!
但是我不会打暴力,也没时间拍
肉眼查错
查出一堆小错,改掉
过大样例了!!
11:50了!!
然而我还没有判无解
保险起见,先放着,把前两题再肉眼一遍,再试一遍有没有错
把提交的文件夹建好,各种操作处理完,已经没时间了
第三题只有70分,被卡成暴力分,AK失败
估分100+100+70
出考场后问大家,发现前两题都稳稳的,第三题大多都有70分
除了某些人有点小爆炸
听说一数论大佬推第一题推了半个钟,用上了各种高级玩意,还弄错了?
午餐在二中饭堂吃
纪中饭堂最烂定律还未被打破
吃饭时毫无疑问的在讨论问题
然后突然发现我第二题有一个bug
对于已经判断是ERR的,剩下的我直接用
处理掉
然后听说这样会读到空格就停止?
有大佬知道会不会的一定要告诉我
那我不就惨了?又被卡掉30分?只剩240了?
郁闷
中午回去,睡的挺舒服
下午骑车出去浪,发现新区人少,空气好,公园全铺了绿道,可以说是广州的世外桃源了
晚饭回二中饭堂,于是就发生了初中生大量请假不跟队去饭堂的事
听说他们会被处理
晚上又去万达(就这一个地方可以去)
其实day1结束后不久,各个Q群上就有各种评论了
UOJ群上的评论有一个很亮
NOIP奇数年必出神搜索题
NOIP2013mayan游戏
NOIP2015斗地主
包括什么靶形数独都在NOIP奇数年
立了个大flag
早上一个趣事
在酒店自助餐厅吃饭,因为不给试机,就不去那么早,在餐厅坐着和咖啡。突然老师站起来,拍了下手,说走了出发了。于是餐厅里绝大多数人站了起来,涌了出去,餐厅几乎空了……
还是没有我的位置,坐回备用机
看题第一眼
首先看到的是第一题上那个计算公式
woc,d1t1数论,d2t1立体几何??
然后仔细看了看
额这不就是联通块吗
n才1000,那不随便做吗,切掉
t2,看题感觉是最小生成树之类的
然后懵逼了几分钟
突然看到n才12
那不提示状压吗,状压很可做啊
我随手设了一个到x层,选取状态为s
然后就不会了,因为我不知道接下来怎么转移
很快,我想到了应该再枚举新一轮选取的点的状态,但是这些点和哪些点连,我还是不知道怎么做
于是状态加设一维:表示第x层选的是哪些点,预处理一下
好像可以切,先过
看t3
flag果然没破
应该是什么数据结构之类的
但是我只想到了直接模拟,还有n=1的splay
想到9点,无果
算了先打第一题
第一题十分钟打完,很顺利,样例几乎一遍过
打t2,因为考虑还算充分,边打边稍微修改了一下想法,10点左右打完
调过大样例后,试了一下极限
跑3s,好像有希望
算了一下空间,700M,希望破灭
把数组开到适应n=11,空间变成100M
时间是秒过
然后思考了一下70分之后有多少分
觉得大概80分
思考了好久怎么去掉一个状态
思考不到
那就先放着,去搞第三题
第三题很快打完模拟,随后发现并不需要模拟整个数组,仅需对操作模拟就行了
这样是q方的,q只有500,可以过50分
11点左右,看还有时间,就打了个splay,再骗20分
到了11:30,先去看了看前两题还有什么问题,顺便想一想第二题可不可以去掉一个状态
还是无果
第三题又不停的想水法,然而只能常数优化,没有作用,在n为10的5次方时应该没有作用
那么估分100+70~80+70
中午吃饭的时候讨论了一下,猛然发现自己真傻
第二题我的第二个二进制状态没有任何作用,枚举新选哪些点后可以直接连到最深一层,因为连到前面如果更优会在转移到这一层之前就考虑到
第三题howarli给了一种做法:
对于每一行维护一个splay,对于最后一列维护一个splay,当然不用全部维护,仅维护成为答案的点,这个再用主席树维护
说起来简单,打起来可不是NOIP风格
听说alanAK了(不过也正常,这么NOIP的题)??%%%
虽说有机器的原因,但主要原因还是自己平时训练不足
数学不行(虽然在这次没有体现出来),D1t1lyd大佬1分钟切掉
对模型和一些方法的掌握和运用不到位
D2t2很裸的状压DP都没有切掉,甚至想到了正确的状态设置也没有想到正解,强行把正解变成暴力
不能掉以轻心,要求稳
D1t2可能会因为使用了那种输入而被卡掉
…………
那个scanf真的会炸啊!!!
这个是GGF,不是CCF,CCF一点都不骗钱对吧
然而是反向爆炸?
100+90+60+100+75+70
那个scanf只爆了10分?
还有一个,noi官网出成绩时间推迟两次是什么情况
这次怎么差了这么多?
可以打表证明
具体证明我可以大概弄出来,但是真的讲不出来(太弱了)
用递归,打个栈之类的都行
那么设f[i][j]为到点i,比最短路长j的方案数
先求出一个最短路,然后拓扑排序做
求拓扑序是加一个优化:对于没用的点,直接删掉
设这个点是(i,j),如果起点到i的最短路+j+i到终点的最短路已经大于k,就删掉它
加上这个优化9s变2s
如果卡longlong,可以用unsigned long long
设f[x][s]表示到最深第x层,选取了点的状态为s1
在上面已经大概讲过了,再重复一遍
每次选取一个s的补集s1,并选取这些点
设c[s][s1]表示有s这些点,要连通s1这些点,选取的边的和的最小值
那么转移f[x+1][s+s1]=f[x][s]+c[s][s1]∗x
因为如果连到比x深度更浅的点更优,会在之前被考虑
题解和标程在后面(是在day20的后面,day1和day2里面的是游记不是题解!)
因为今年题目难度和风格太不友善,就不每一题分别写题解了
除了d2t3队列,点击进入
Day0
结束了三周的停课训练(其实不想结束)回家休息一下(猩球大战3挺好看的)
晚上去广州
这次不在六中比赛,换到了二中
区别在于,六中可以在考场的窗外看到广州塔,二中外面全是山
二中在萝岗区,是个新区,新到晚上想出去玩,都只有一个地方可以去,摩拜也找不到,路灯什么的都没装。
趁着酒店搞消防演习停电,找到理由去万达走了一圈
Day1
这床好舒服啊毕竟是四星级酒店
早餐也很不错,基本上想得到的都有
提前十五分钟进考场,转了几圈,没有我的位置?
直到快开始才给了我一个备用机
然后我惊奇的发现,我的备用机是win7,6代i5,8G,其他人的都是XP!!
rp++
然后不给试机?
那提前有什么用?
开始看第一题
啊!!!NOIPD1t1考数论??
然后我在草稿纸上写了ax+by=c
然后懵逼了好一会
算了先过
第二题是循环模拟,不久前做过一道题,那个要算具体循环次数,这题还是很简单的,秒掉
再看第三题
要求路程少于一个距离的路径数量
又懵逼了许久
然后猛然发现他的k只有50,意思就是最多求比最短路长50的路
那直接拆点不就行了吗?
切掉
回去看第一题
又看了许久,已经9:10了
我不敢再看了,赶紧打了个暴力,顺便找一下规律
打了个表,好像很有规律啊
然后仔细看了看,不就是n*m-n-m吗?
于是用暴力验证这个规律
好像是对的,那第一题意外切掉
去打第二题,c++字符串处理比较麻烦,调试也花了一点时间,但在10:10之前,大样例也过了
第三题先码了个spfa
然后复制一遍,加上k这个限制
测试样例,错了
接着我发现这种做法好像有错误,在累加方案的时候可能会算重
怎么办??先上个厕所冷静一下
回来之后发现拓扑排序一下就好了
迅速加上拓扑排序(说是迅速,打完已经十一点了)
调过小样例,又花了十分钟
试大样例,没过!!
但是我不会打暴力,也没时间拍
肉眼查错
查出一堆小错,改掉
过大样例了!!
11:50了!!
然而我还没有判无解
保险起见,先放着,把前两题再肉眼一遍,再试一遍有没有错
把提交的文件夹建好,各种操作处理完,已经没时间了
第三题只有70分,被卡成暴力分,AK失败
估分100+100+70
出考场后问大家,发现前两题都稳稳的,第三题大多都有70分
除了某些人有点小爆炸
听说一数论大佬推第一题推了半个钟,用上了各种高级玩意,还弄错了?
午餐在二中饭堂吃
纪中饭堂最烂定律还未被打破
吃饭时毫无疑问的在讨论问题
然后突然发现我第二题有一个bug
对于已经判断是ERR的,剩下的我直接用
scanf("%s\n",s);
处理掉
然后听说这样会读到空格就停止?
有大佬知道会不会的一定要告诉我
那我不就惨了?又被卡掉30分?只剩240了?
郁闷
中午回去,睡的挺舒服
下午骑车出去浪,发现新区人少,空气好,公园全铺了绿道,可以说是广州的世外桃源了
晚饭回二中饭堂,于是就发生了初中生大量请假不跟队去饭堂的事
听说他们会被处理
晚上又去万达(就这一个地方可以去)
其实day1结束后不久,各个Q群上就有各种评论了
UOJ群上的评论有一个很亮
NOIP奇数年必出神搜索题
NOIP2013mayan游戏
NOIP2015斗地主
包括什么靶形数独都在NOIP奇数年
立了个大flag
Day2
和day1一样,早餐很好,睡的很好早上一个趣事
在酒店自助餐厅吃饭,因为不给试机,就不去那么早,在餐厅坐着和咖啡。突然老师站起来,拍了下手,说走了出发了。于是餐厅里绝大多数人站了起来,涌了出去,餐厅几乎空了……
还是没有我的位置,坐回备用机
看题第一眼
首先看到的是第一题上那个计算公式
woc,d1t1数论,d2t1立体几何??
然后仔细看了看
额这不就是联通块吗
n才1000,那不随便做吗,切掉
t2,看题感觉是最小生成树之类的
然后懵逼了几分钟
突然看到n才12
那不提示状压吗,状压很可做啊
我随手设了一个到x层,选取状态为s
然后就不会了,因为我不知道接下来怎么转移
很快,我想到了应该再枚举新一轮选取的点的状态,但是这些点和哪些点连,我还是不知道怎么做
于是状态加设一维:表示第x层选的是哪些点,预处理一下
好像可以切,先过
看t3
flag果然没破
应该是什么数据结构之类的
但是我只想到了直接模拟,还有n=1的splay
想到9点,无果
算了先打第一题
第一题十分钟打完,很顺利,样例几乎一遍过
打t2,因为考虑还算充分,边打边稍微修改了一下想法,10点左右打完
调过大样例后,试了一下极限
跑3s,好像有希望
算了一下空间,700M,希望破灭
把数组开到适应n=11,空间变成100M
时间是秒过
然后思考了一下70分之后有多少分
觉得大概80分
思考了好久怎么去掉一个状态
思考不到
那就先放着,去搞第三题
第三题很快打完模拟,随后发现并不需要模拟整个数组,仅需对操作模拟就行了
这样是q方的,q只有500,可以过50分
11点左右,看还有时间,就打了个splay,再骗20分
到了11:30,先去看了看前两题还有什么问题,顺便想一想第二题可不可以去掉一个状态
还是无果
第三题又不停的想水法,然而只能常数优化,没有作用,在n为10的5次方时应该没有作用
那么估分100+70~80+70
中午吃饭的时候讨论了一下,猛然发现自己真傻
第二题我的第二个二进制状态没有任何作用,枚举新选哪些点后可以直接连到最深一层,因为连到前面如果更优会在转移到这一层之前就考虑到
第三题howarli给了一种做法:
对于每一行维护一个splay,对于最后一列维护一个splay,当然不用全部维护,仅维护成为答案的点,这个再用主席树维护
说起来简单,打起来可不是NOIP风格
听说alanAK了(不过也正常,这么NOIP的题)??%%%
问题
码力不足,调程序速度过慢虽说有机器的原因,但主要原因还是自己平时训练不足
数学不行(虽然在这次没有体现出来),D1t1lyd大佬1分钟切掉
对模型和一些方法的掌握和运用不到位
D2t2很裸的状压DP都没有切掉,甚至想到了正确的状态设置也没有想到正解,强行把正解变成暴力
不能掉以轻心,要求稳
D1t2可能会因为使用了那种输入而被卡掉
…………
Day3
由停课训练变为停训补课,昏昏沉沉,面前堆着两个星期的作业Day4
等待成绩和代码中Day8
学军数据早就出来了,得分是440,d2t1因为longlong卡掉20分等那个scanf真的会炸啊!!!
这个是GGF,不是CCF,CCF一点都不骗钱对吧
Day10
成绩已出,有点爆炸,离我的估分和学军数据都有点距离然而是反向爆炸?
100+90+60+100+75+70
那个scanf只爆了10分?
还有一个,noi官网出成绩时间推迟两次是什么情况
Day20
分数线已出,广东295,最高浙江,360这次怎么差了这么多?
题解
d1t1
输入n,m,输出n*m-n-m可以打表证明
具体证明我可以大概弄出来,但是真的讲不出来(太弱了)
d1t2
直接模拟即可用递归,打个栈之类的都行
d1t3
最短路求方案数大家肯定会那么设f[i][j]为到点i,比最短路长j的方案数
先求出一个最短路,然后拓扑排序做
求拓扑序是加一个优化:对于没用的点,直接删掉
设这个点是(i,j),如果起点到i的最短路+j+i到终点的最短路已经大于k,就删掉它
加上这个优化9s变2s
d2t1
直接枚举任意两点是否可以连通,直接做最短路即可如果卡longlong,可以用unsigned long long
d2t2
状压DP设f[x][s]表示到最深第x层,选取了点的状态为s1
在上面已经大概讲过了,再重复一遍
每次选取一个s的补集s1,并选取这些点
设c[s][s1]表示有s这些点,要连通s1这些点,选取的边的和的最小值
那么转移f[x+1][s+s1]=f[x][s]+c[s][s1]∗x
因为如果连到比x深度更浅的点更优,会在之前被考虑
程序
d1t1
#include<cstdio> #include<algorithm> #include<cstring> #define fo(i,a,b) for(int i=a;i<=b;i++) #define fd(i,a,b) for(int i=a;i>=b;i--) #define ll long long using namespace std; ll x,y; int main() { freopen("math.in","r",stdin); freopen("math.out","w",stdout); scanf("%lld%lld",&x,&y); printf("%lld\n",x*y-x-y); fclose(stdin);fclose(stdout); return 0; }
d1t2
#include<cstdio> #include<algorithm> #include<cstring> #define fo(i,a,b) for(int i=a;i<=b;i++) #define N 110 using namespace std; int n,m,i=1,ans=0,flag=1,bz[N+N]; char s ; int get() { char c=getchar();int x=0; if(c=='n') { getchar(); return -1; } for(;c>='0'&&c<='9';c=getchar()) x=x*10+c-48; return x; } void dg(int x) { int aans=ans,hy=ans; while(i<=n) { i++; char c=getchar(); if(c=='E') { scanf("\n"); ans=aans; return; } scanf(" %c ",&c); if(bz[c]==1) flag=0; bz[c]=1; int q=get(),w=get(); if(q==-1&&w==-1) { dg(x+1); } if(q==-1&&w>0) { int jy=ans;dg(x+1); ans=jy; } if(q>0&&w==-1) { ans++;dg(x+1); } if(q>0&&w>0) { int jy=-1; if(q>w) jy=ans;dg(x+1); if(jy!=-1) ans=jy; } bz[c]=0; aans=max(ans,aans); ans=hy; } ans=aans; if(i>n&&x!=0) flag=0; } int main() { freopen("complexity.in","r",stdin); freopen("complexity.out","w",stdout); int ac;scanf("%d\n",&ac); for(;ac;ac--) { memset(bz,0,sizeof(bz)); i=1;flag=1;ans=0; char c;scanf("%d O(%c",&n,&c); if(c=='n') { scanf("^%d",&m); } else m=0; scanf(")\n"); dg(0); if(i<=n) { flag=0; while(i<=n) { char c=getchar(); if(c=='E') { scanf("\n"); } else { scanf(" %c ",&c); int q=get();q=get(); } i++; } } if(flag==0) printf("ERR"); else { if(ans==m) printf("Yes"); else printf("No"); } printf("\n"); } fclose(stdin);fclose(stdout); return 0; }
d1t3
#include<cstdio> #include<algorithm> #include<cstring> #define fo(i,a,b) for(int i=a;i<=b;i++) #define N 111000 #define cl(a) memset(a,0,sizeof(a)) #define ll long long using namespace std; int n,m,k,mo,last[N],next[N*2],to[N*2],date[N*2],tot=0,g[N],d[N*100][2],bz ,flag=0,g1 ; int las[N*50],nex[N*100],tt[N*100],data[N*100],rd[N*60],d1[N*60],bz1[N][52],q[N*10][3],mm; int xhcs; ll f[N*60]; void putin(int x,int y,int z) { next[++tot]=last[x];last[x]=tot;to[tot]=y;date[tot]=z; } void put(int x,int y,int z) { nex[++tot]=las[x];las[x]=tot;tt[tot]=y;data[tot]=z;rd[y]++; } void SPFA(int S) { int he=0,ta=1; d[1][0]=S;bz[S]=1; memset(g,60,sizeof(g)); g[S]=0; while(he<ta) { int x=d[++he][0]; for(int i=last[x];i;i=next[i]) { int y=to[i]; if(g[x]+date[i]<g[y]) { g[y]=g[x]+date[i]; if(bz[y]==0) bz[y]=1,d[++ta][0]=y; } } bz[x]=0; } } void bfs() { mm=0; cl(bz1); int he=0,ta=1; d[1][0]=bz1[1][0]=1; d[1][1]=0; while(he<ta) { int x=d[++he][0],z=d[he][1]; for(int i=last[x];i;i=next[i]) { int y=to[i],q=g[x]+z+date[i]-g[y]; if(q<=k&&g[y]+q+g1[y]-g <=k) { put(z*n+x,q*n+y,date[i]); if(bz1[y][q]==0) bz1[y][q]=1,d[++ta][0]=y,d[ta][1]=q,mm++; } } } he=0; } void gans() { int he=0,ta=0; fo(i,1,mm) if(rd[i]==0) d1[++ta]=i; f[1]=1; while(he<ta) { int x=d1[++he]; f[x]%=mo; for(int i=las[x];i;i=nex[i]) { int y=tt[i]; f[y]+=f[x]; rd[y]--; if(rd[y]==0) d1[++ta]=y; } } if(ta<mm) f[0]=-1; } int main() { freopen("park.in","r",stdin); // freopen("park.out","w",stdout); int ac;scanf("%d",&ac); for(;ac;ac--) { scanf("%d%d%d%d",&n,&m,&k,&mo); cl(last);tot=0; fo(i,1,m) { scanf("%d%d%d",&q[i][0],&q[i][1],&q[i][2]); putin(q[i][1],q[i][0],q[i][2]); } SPFA(n); fo(i,1,n) g1[i]=g[i]; cl(last);tot=0; fo(i,1,m) putin(q[i][0],q[i][1],q[i][2]); SPFA(1); tot=0; cl(las);cl(rd); xhcs=0; bfs(); cl(f); gans(); int ans=0; if(f[0]==-1) printf("-1\n"); else { fo(j,0,k) (ans+=f[j*n+n])%=mo; printf("%d\n",ans); } } }
d2t1
#include<cstdio> #include<cstring> #include<algorithm> #define fo(i,a,b) for(int i=a;i<=b;i++) #define N 1010 #define ll long long #define ull unsigned long long using namespace std; int n,b ,d ,bz ; ll h,r,a [3]; void read(ll &x) { char c=getchar();ll y=1;x=0; for(;c<'0'||c>'9';c=getchar()) if(c=='-') y=-1; for(;c>='0'&&c<='9';c=getchar()) x=x*10+c-48; x*=y; } ll sqr(ll x){return x*x;} ull dis(int x,int y) { return sqr(a[x][0]-a[y][0])+sqr(a[x][1]-a[y][1])+sqr(a[x][2]-a[y][2]); } void bfs() { d[1]=n+1;memset(bz,0,sizeof(bz)); int he=0,ta=1;bz[n+1]=1; while(he<ta) { if(bz[n+2]) break; int x=d[++he]; fo(j,1,n+2) if(b[x][j]&&!bz[j]) bz[j]=1,d[++ta]=j; } } int main() { freopen("cheese.in","r",stdin); freopen("cheese.out","w",stdout); int ac;scanf("%d",&ac); for(;ac;ac--) { scanf("%d",&n);read(h);read(r); fo(i,1,n) read(a[i][0]),read(a[i][1]),read(a[i][2]); memset(b,0,sizeof(b)); fo(i,1,n) { fo(j,i+1,n) { if(dis(i,j)<=sqr((ull)2*(ull)r)) b[i][j]=b[j][i]=1; } if(a[i][2]<=r) b[i][n+1]=b[n+1][i]=1; if(a[i][2]>=h-r) b[i][n+2]=b[n+2][i]=1; } bfs(); if(bz[n+2]) printf("Yes\n");else printf("No\n"); } fclose(stdin);fclose(stdout); return 0; }
d2t2
#include<cstdio> #include<cstring> #include<algorithm> #define fo(i,a,b) for(int i=a;i<=b;i++) #define N 14 #define M 4100 #define INF 1010580540 using namespace std; int n,m,a ,e ,b[M][M],c[M] ,f[M],g[M],bz[M],d[1010000],d1[1010000],ans=INF; int main() { freopen("treasure.in","r",stdin); freopen("treasure.out","w",stdout); e[0]=1;fo(i,1,12) e[i]=e[i-1]*2; memset(a,60,sizeof(a)); memset(c,60,sizeof(c)); memset(g,60,sizeof(g)); memset(f,60,sizeof(f)); scanf("%d%d",&n,&m); fo(i,1,m) { int x,y,z;scanf("%d%d%d",&x,&y,&z); if(z<a[x][y]) a[x][y]=a[y][x]=z; } fo(i,1,n) fo(s,1,e -1) if((s&e[i-1])==0) fo(j,1,n) if((e[j-1]&s)!=0) c[s][i]=min(c[s][i],a[j][i]); fo(s,1,e -1) fo(t,1,e -1) if((s&t)==0) fo(j,1,n) if((e[j-1]&t)!=0) { if(c[s][j]<INF) b[s][t]+=c[s][j]; else {b[s][t]=INF;break;} } int he=0,ta=0,x=0; fo(i,1,n) d[++ta]=e[i-1]=e[i-1],f[e[i-1]]=0; while(he<ta) { int jt=0; x++; while(he<ta) { int s=d[++he]; fo(t,1,e -1) if((s&t)==0&&b[s][t]<INF) { if(f[s]+b[s][t]*x<g[s+t]) { g[s+t]=f[s]+b[s][t]*x; if(g[s+t]<ans&&!bz[s+t]) bz[s+t]=1,d1[++jt]=s+t; } } } fo(i,1,ta) f[d[i]]=INF; fo(i,1,jt) { bz[d1[i]]=0; if(d1[i]!=e -1) d[i]=d1[i],f[d1[i]]=g[d1[i]]; else ans=min(ans,g[d1[i]]); g[d1[i]]=INF; } he=0,ta=jt; } printf("%d\n",ans); fclose(stdin);fclose(stdout); return 0; }
欢迎大佬指正
相关文章推荐
- [置顶] noip2017游记
- [置顶] NOIP2017提高组复赛游记
- NOIP2017提高组 题解&游记
- NOIP2017提高组初赛游记 (题解&心得总结)(c++)
- [置顶] SDOI 游记
- 【游记】NOIP2017
- NOIP2017 游记
- NOIP2017 游记 Day2
- [置顶] NOIP 2017 游记
- [置顶] 新坑 Leet Code DP(动态规划)题解总和
- [置顶] 扬州游记_2017
- [置顶] IOI 2019 游记
- 【游记】关于NOIP2017
- [置顶] HDU 二分搜索 题解目录
- [置顶] GDKOI2018 游记
- 【游记】记NOIP2017滚粗之旅
- WC2018 游记 & 题解
- NOIP2017 复赛游记
- [置顶] NOIP2017 酱油记
- [置顶] 小白题解 Codeforces 794B Cutting Carrot