2020.01.19【NOIP提高组】模拟B 组——总结——钻石交易

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Sample Input

4 5 2 7 1
0 0
10 0
0 8
100 10
1 2 5
1 3 10
1 4 8
2 3 4
2 4 6

Sample Output

16
【样例说明】
最优方案为:先从城市1到城市2,在城市2卖掉第一颗钻石,然后到城市4,卖掉第二颗钻石并结束旅行。

Data Constraint

在这里插入图片描述

思路

状压dp+spfa,但是会炸,所以考虑优化:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
int t,n,m,k,s,x,y,z,ans,cnt;
int a[1507][1507],head[4007],next[4007],last[4007],cost[4007],f[1507][1507],d[1507];
bool vis[1507];
queue<int>q;
void add(int x,int y,int z){
    last[++cnt]=y;
	cost[cnt]=z;
	next[cnt]=head[x];
	head[x]=cnt;
}
void spfa(int state){
    int x;
    vis[s]=1;
	for(int i=1;i<=n;i++)
		d[i]=f[i][state],q.push(i);
    while(!q.empty()){
        x=q.front();
        for(int i=head[x];i;i=next[i]){
            if(d[x]-cost[i]>=d[last[i]]){
                d[last[i]]=d[x]-cost[i];
                if(!vis[last[i]]){
                    vis[last[i]]=1;
                   	q.push(last[i]);
                }
            }
        }
        q.pop();
        vis[x]=0;
    }
    for(int i=1;i<=m;i++){
        if(state&(1<<(i-1)))continue;
        for(int j=1;j<=n;j++)
			if(d[j]>=0)f[j][state|(1<<(i-1))]=max(f[j][state|(1<<(i-1))],d[j]+a[j][i]);
    }
}
int main(){
    scanf("%d%d%d%d%d",&n,&t,&m,&k,&s);
    for(int i=1;i<=n;i++)
	for(int j=1;j<=m;j++)
		scanf("%d",&a[i][j]);
    for(int i=1;i<=t;i++)
		scanf("%d%d%d",&x,&y,&z),add(x,y,z);
    memset(f,128,sizeof(f));
    f[s][0]=k;
    for(int j=0;j<=(1<<m)-1;j++)
		spfa(j);
    for(int i=1;i<=n;i++)
	for(int j=0;j<=(1<<m)-1;j++)
		ans=max(ans,f[i][j]);
    printf("%d\n",ans);
}
2020.01.19NOIP提高模拟比赛-1.水池,2.数字排序,3.球星,4.钻石交易 总结反思 水池 比赛时 我最讨厌这种数学类题了,我首先想到了这几种情况,设\(jl[][]\)表示两点之间弧的距离,从F到G可以由 F->G F->B->A->G F->A->B->G 路径到达,那么,关键就是求弧长了,我于是自己乱写了一个式子,结果样例都没有过,一看时间已经去了很多了,于是放弃了,我觉得很多人会AC. 之后 居然没有人比赛时A了这道题,这题正解三角函数,初中的蒟蒻我还没学~~~ 求弧长可以用两点之间的距离先求出圆心角,然后就可以通过圆心角求出弧长了... 阅读详情

相关推荐

2020.01.19NOIP提高模拟B ——总结——水池

Description 有一个圆形的水池,水池的圆心坐标为(0, 0)。有座桥跨越水池,桥可以看作直线段AB,A点和B点都在水池边上。 Merlin想从F点走到G点,并且F点和G点都在水池边上,但是他不会游泳。请告诉他从F点到G点的最短路程是多少。 Input 输入有多数据。 每数据的第一行是一个整数R (1<=R<=100), 表示水池的半径。 第二行包含8个实数XA, YA, ...

jay_zai的博客 344

2021.9.5 ZROI NOIP Day2模拟

时间安排 8.00-8.20 开题把四道题草草看了一遍,T3,T4没怎么看懂,有点阅读困难 8.20-10.10 第一题首先我先去打表了,前三十分打表我感觉都可以打出来,结合暴力发现一个性质就是三个数字必须平分才有解,通过这个性质就可以很轻松的打表了,继续结合暴力找性质,发现当前的串就是前面两个串结合起来,小的在前大的在后即可,然后我就开始手动打表…花了很多时间打到了8,发现我可以写个程序去把比较两个串大小然后结合在一起,这样必然比我手动快而且正确啊…然后用这种方法继续打表打到了12,算了一下当到最终的15

weixin_55355427的博客 275

2020.01.18【NOIP提高模拟B ——总结——9数字

Description 有一天,Merlin同学突然发现一件有趣的事情。1到100之间的整数,有一些写成带分数的形式后,刚好使用了1到9这9个数字各一次,例如对于6,可以写成:      现在给定一个1到100之间的整数,请你找出所有满足这种形式的方案,即      其中,A是给定的整数,B、C和D是正整数,并且在B、C、D三个数中,1到9这9个数字恰好都出现过一次且仅一次。 Input 输入仅一...

jay_zai的博客 331

noip2017提高初赛(答案+选择题题目+个人分析)

被学弟学妹们逼着填坑的我瑟瑟发抖... 一、单项选择题(共15 题,每题1.5 分,共计22.5 分;每题有且仅有一个正确选项) 1. 从( )年开始,NOIP 竞赛将不再支持Pascal 语言。 A. 2020 B. 2021 C. 2022 D. 2023 C 这让学Pascal的我感到了一丝不友好…. 2.在8 位二进制补码中,10101011 表示的数是十进制下的( )。 A...

Eirlys的博客 5万+

2020.01.19NOIP提高模拟比赛-1.水池,2.数字排序,3.球星,4.钻石交易 总结反思...

水池 比赛时 我最讨厌这种数学类题了,我首先想到了这几种情况,设\(jl[][]\)表示两点之间弧的距离,从F到G可以由 F->G F->B->A->G F->A->B->G 路径到达,那么,关键就是求弧长了,我于是自己乱写了一个式子,结果样例都没有过,一看时间已经去了很多了,于是放弃了,我觉得很多人会AC. 之后 居然没有人比赛时A了这道题,...

CJZ的博客 250

2021 ZROI CSP-S&NOIP Day3模拟

时间安排 CSP-S 18.05-18.10 第一题切了 18.10-18.30 第二题切了 18.30-19.00 第三题80分写出来了 19.00-19.40 拍T2 T3 19.40-20.30 猛然想到解决T3的算法Hash,第一次考试码Hash,还对了,很有成就感 20.30-21.30 想不出来第四题有什么更好的做法了,关于字符串的算法一大堆,什么序列自动机,回文自动机,马拉车,字符串Hash等等等等,最后就码了个马拉车保了25,冲点部分分 NOIP 8.00-9.00 一边颓,一边审题,想T3

weixin_55355427的博客 293

提高2020.08.04【NOIP提高模拟 总结

2020.08.042020.08.042020.08.04【NOIPNOIPNOIP提高模拟 总结 这次比赛我考了120120120分,还可以。 这是我第一次来到BBB提高)比赛,头起的很好。 这是我的比赛成绩: 第一题:暴力预处理。比赛时打了类似正解的方法拿了808080分。 第二题:线段树(吉老师线段树)优化暴力。比赛时直接暴力判断统计,拿了202020分。 第三题:dpdpdp加优化。比赛时打了暴力搜索,000分。 第四题:可持久化trietrietrie。比赛时打了暴力枚举,20202

linweitong2020的博客 562

2020.7.21 T4WTF交换(jz暑假训练day6)

sum = 0 for i = 1 to N index = min{ ID[i], ID[i+1] } sum = sum + A[index] 将数A往右循环移动R位 将数A内所有的数取相反数 for i = 1 to N index = max{ ID[i], ID[i+1] } index = index + 1 sum = sum + A[index] 将数A往右循环移动R位

jay_zai的博客 4510

jzoj2020.06.06【NOIP提高模拟

好久没打博客了~~~~~ 趁着改完题就搞一搞(话说最近的题都好淼 ) T1 The Bovine Shuffle Description FJ 坚信快乐的牛可以产出更多的牛奶,因此 FJ 在牛棚里安装了一个巨大的迪斯科球并且打算让奶牛们学会跳舞。 FJ在许多出名的奶牛舞中选择了一种叫做 Bovine Shuffle 的舞蹈。这种舞蹈由 FJ 的 N 头奶牛成。N头奶牛以一种顺序排成一行,接着表演数次 shuffle。每次的 shuffle 会将奶牛重新排列。FJ 为了让奶牛们更加快乐,让奶牛们更容易找到重

jay_zai的博客 704

2020.7.22 T1三色树(jz暑假训练day7)

Description 给出一个N个节点的无根树,每条边有非负边权,每个节点有三种颜色:黑,白,灰。 一个合法的无根树满足:树中不含有黑色结点或者含有至多一个白色节点。 现在希望你通过割掉几条树边,使得形成的若干树合法,并最小化割去树边权值的和。 Input 第一行一个正整数N,表示树的节点个数。 第二行N个整数Ai,表示i号节点的颜色,0 表示黑色,1表示白色,2表示灰色。 接下来N-1行每行三个整数Xi Yi Zi,表示一条连接Xi和Yi权为Zi的边。 Output 输出一个整数表示其最小代价。 Sam

jay_zai的博客 593

2020.7.15 排列统计 (jz暑假训练day1)

排列统计 Description 对于给定的一个长度为n的序列{B[n]},问有多少个序列{A[n]}对于所有的i满足:A[1]~A[i]这i个数字中有恰好B[i]个数字小等于i。其中{A[n]}为1~n的一个排列,即1~n这n个数字在序列A[I]中恰好出现一次。   数据保证了至少有一个排列满足B序列。 Input 输入的第1行为一个正整数N,表示了序列的长度。   第2行包含N个非负整数,描述了序列{B[i]}。 Output 输出仅包括一个非负整数,即满足的{A[i]}序列个数。 Sample Inp

jay_zai的博客 337

2020.7.15 旅行(jz暑假训练day1)

T2 旅行 Description 今天又是个神圣的日子,因为LHX教主又要进行一段长途旅行。但是教主毕竟是教主,他喜欢走自己的路,让别人目瞪口呆。为什么呢,因为这条路线高低不平,而且是相当的严重。   但是教主有自己的办法,他会魔法。   这段路可以用一个长度为n的序列A[i]来表示,A[i]表示了第i这段路的高度。毕竟教主即使会使用魔法他还是个人,教主如果想穿越这条路线,他必须从第1段路开始走,走到第n段,从第i段走到第i+1段路需要消耗|A[i+1]-A[i]|点体力。为了节省体力,教主使出了他另一种

jay_zai的博客 306

最近的题目总结(树,电话线铺设,我的天)

总结树solution电话线铺设Descriptioninputoutput数据solution我的天solution 几天没打博客了,现在记录一下一些比较好的题目。 树 Description 有n个点,它们从1到n进行标号,第i个点的限制为度数不能超过A[i]. 现在对于每个s (1 <= s <= n),问从这n个点中选出一些点成大小为s的有标号无根树的方案数。 n<=100 样例是 3 2 2 1 答案 3 3 2 solution 这一类的题目一般都会用到prufer编码,

jay_zai的博客 258

2020.7.16 T4【NOIP2015模拟10.29B】抓知了(jz暑假训练day2)

Description 深海龙王和水葫芦娃放了暑假闲的无聊,一天他们路过一棵树,听到树上的知了叫的好欢啊∼ 深海龙王准备抓几只知了送给水葫芦娃。他发现面前的这棵树是一颗以1 号节点为根节点的一颗有根树,同时他又发现这颗树上的每一个节点i 上都恰好停有一只蝉,正在愉快的以ai 的响声鸣叫∼ 深海龙王会从1 号节点起沿着树边一直爬,直到爬到一个叶子节点(请不要在意他怎么下来),在这途中他可以选择一些他经过的蝉并将它们抓起来。但是水葫芦娃希望深海龙王抓的知了能发出越来越响的鸣叫声,起码得要单调不减! Input

jay_zai的博客 256

2020.7.17 T1亲戚(jz暑假训练day3)

Description Input Output Sample Input 4 0 1 1 0 Sample Output 8 Data Constraint 赛时 25分暴力+5分全排列 正解 树形dp 方程是: f[x]=((f[x] * f[v])%mod*c(min(size[x]-1,size[v]),size[x]-1+size[v]))%mod; x为当前遍历的点,v为儿子,此时的size[x]并没有加上v的节点数。那么这个方程的意思也就是v的子树与前面x遍历过的子树求方案,f[x]*

jay_zai的博客 235

2020.01.18【NOIP提高模拟B ——总结——探险者拉罗

晚上十点十分才a了这题,太难了。 Description 探险者拉罗最近发现了一个远古的宫殿,该宫殿可以表示为N×N个格子的迷宫,其中有一个格子是入口(用E表示),一个格子是出口(用X表示),有若干个格子是藏金点(用G表示),有若干个格子是障碍物(用#表示),其他格子都有怪物在里面(用-表示)。拉罗由入口开始探险,希望到达尽量多的藏金点,然后由出口离开。当然,障碍物是不能通过的。而且,由于那些远古...

jay_zai的博客 229

2020.7.18 T3Ocd(jz暑假训练day4)

Description Input Output Sample Input 5 6 7 3 1 4 2 5 2 4 5 3 1 2 4 1 3 5 1 4 3 5 2 5 2 1 4 3 Sample Output 4 2 3 5 1 Data Constraint 正解 首先考虑求出逆序对方案数,设f[i][j]表示当前第i位有了j个逆序对时的方案数。由于每个i最多贡献i-1个逆序对,那么f[i][j]+=f[i-1][l](l=max(0,j-i+1)至j) 但是这么做就爆了,但是我们只要知道它的

jay_zai的博客 227

2020.7.23 T1同余(jz暑假训练day8)

Description Input Output Sample Input 2 1 1 5 100 3 2 0 7 7 2 2 Sample Output 16 0 Data Constraint 正解 dp,对于c,可以发现c在1至p-1之间时方案个数是一样的,所以c为多少不用考虑,只要判断是否为0就行了,然后我们设d[i][1]表示不是0的个数,d[i][0]表示是0的个数,然后d[i][1]=p-1^a[i]-1 d[i][0]就是总共的(p^a[i])-不是0的个数(p-1 ^ a[i]),

jay_zai的博客 176
上一篇: 2020.01.19【NOIP提高组】模拟B 组——总结——数字排序
下一篇: noip必会考点
jay_zjy1022
博客等级 码龄7年 11粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值