1. 拿饼干

内存限制:128Mb

时间限制:1s

题目描述

小明今天外出野炊。他的母亲为他制作了M种他喜欢的饼干,共有N块。每块饼干都被标了编号,从1一直标到N。第i块饼干的重量是W[i]。饼干种类的编号是T[i],从1一直到M。小明想尽可能拿到最大总重量的饼干,但每种饼干只拿一块,而且他的背包的最大承重不能超过C。请帮助小明进行选择,别忘了要确保每种饼干至少拿一块。

输入

第一行包含三个整数N,M,C,之间用一个空格隔开。N代表饼干总数,M代表饼干种类数,C代表小明的背包的总重量。

第二行包含包含N个整数,W[1], W[2], …, W[i], …, W[N],之间用一个空格隔开,标明了每块饼干的重量。

第三行包含N个整数,T[1], T[2], …, T[i], …, T[N] ,之间用一个空格隔开,标明了每块饼干的类型。

输出

显示小明的背包拿足了饼干后的重量。

样例输入

复制

5 3 50
10 3 23 13 21
1 2 2 1 3

样例输出

复制

37

提示

约束条件

1 <= M <= N <= 500

1 <= C <= 10000

1 <= W[i] <= 50

1 <= T[i] <= M

输入样例 1

5 3 50

10 3 23 13 21

1 2 2 1 3

输出样例 1

37

输入样例说明1

小明可以这样选择饼干:

1. 重量为13的第1种饼干;

2. 重量为3的第2种饼干;

3. 重量为21的第3种饼干;

因此总重量为13 + 3 + 21 = 37,未超过背包的最大承重。

输入样例 2

3 2 10

11 12 13

1 2 1

输出样例 2

0

输入样例说明2

小明无论怎么拿都超过了背包最大承重量,因此无法拿走任何一块饼干。

题解 :

分析:典型的分组背包,为确保每种饼干至少拿一块,所以要做标记。

#include<iostream>
#include<cstring>
using namespace std;
int n,m,c;
int s[501],t[501],w[501][501];
int dp[10003],vis[10003],vis2[10003];int main(){cin>>n>>m>>c;for(int i=1; i<=n; i++) cin>>t[i];for(int type,i=1; i<=n; i++){cin>>type;w[type][++s[type]]=t[i];}for(int i=1; i<=m; i++){for(int j=1;j<=c;j++) vis[j]=vis2[j];memset(vis2, 0, sizeof(vis2));for(int j=c; j>=1; j--){for(int k=1; k<=s[i]; k++){if(j>=w[i][k]&&(i==1||vis[j-w[i][k]])){if(dp[j-w[i][k]]+w[i][k]>dp[j]){dp[j]=dp[j-w[i][k]]+w[i][k];vis2[j]=1;}}}}}cout<<dp[c];return 0;
}

2. 村庄

内存限制:64Mb

时间限制:1s

题目描述

很久很久以前, 在一个国家里有N个村庄。起初,这N个村庄相互之间通过M座桥梁相连,桥梁从1到M进行编号。第i座桥在第Ai​个村庄和第Bi​个村庄之间进行连接。因此人们可以在任意两个村庄之间利用这些桥梁进行通行。

为了阻止人们相互联络,入侵者决定一个接一个地毁坏这些桥梁。从第1座桥开始,依次摧毁,直至第K(1 <= K <= M)座桥。

村庄a和村庄b组成一个村庄组合(a, b)(a < b),当第一座桥到第K座桥被依次摧毁后,计算到底有多少个 (a, b)(a < b)这样的村庄组合不能通过剩余的一座或多座桥梁进行来往通行。

输入

第一行包含三个整数N, M, K,分别表示村庄总数、桥梁总数和被摧毁的桥梁数目。

接着有M行,每一行包含两个整数ai, bi,表示由第i座桥梁连接着的两个村庄的编号。

输出

打印出在第一座桥到第K座桥被摧毁后相互不能通行村庄组合的数目。

样例输入

复制

4 5 3
1 2
2 3
3 4
4 1
1 3

样例输出

复制

3

提示

数据范围:

2 <= N <= 10^5

1 <= K <= M <= 10^5

1 <= ai < bi <= N

所有的村庄组合(ai, bi) 各不相同。

题解:

分析:这道题跟图论不占边,考的是并查集的算法。

#include<iostream>
using  namespace std;
int n,m,k;
int pre[100003],num[100003];int find(int x){if(x==pre[x]) return x;return pre[x]=find(pre[x]);
}void join(int x,int y){int fx=find(x);int fy=find(y);if(fx!=fy){pre[fx]=fy;}
}int main(){cin>>n>>m>>k;for(int i=1;i<=n;i++) pre[i]=i;for(int x,y,i=1;i<=m;i++){cin>>x>>y;if(i>k){join(x,y);}}for(int i=1; i<=n; i++){num[find(i)]++;}long long ans=0;for(int i=1; i<=n; i++){if(num[i]){for(int j=i+1; j<=n; j++){if(num[j]) ans+=num[i]*num[j];}}}cout<<ans;return 0;
}

3. 幸运数字

内存限制:64Mb

时间限制:1s

题目描述

数字8、2、6、9是大多数中国人中最喜欢的幸运数字。这几个数字的组合也被视为幸运数字,例如88。

小龙非常喜欢幸运数字。他认为只有满足以下条件的正整数才算是好的整数:

8、2、6、9中的每个数字至少在这个整数中出现一次,而且没有除了这四个之外的其他数字。

小龙想知道在1和N(含N)之间有多少个满足这一条件的整数。

输入

输入一个整数N。

输出

打印输出1到N(含N)之间幸运数字的总数量。

样例输入

复制

5673

样例输出

复制

6

提示

数据范围:

1 <= N < 10^12

样例说明:

有6个不大于5673的幸运数字:2689、2698、2869、2896、2968、2986

题解:

分析:DFS。(学习了此人的博客)2023首届大学生算法大赛——正式赛 5、7(DFS)_panjyash的博客-CSDN博客

#include<iostream>
using namespace std;
typedef long long LL;
LL n,ans;void dfs(LL u,bool f2,bool f6,bool f8,bool f9){if(u>n) return ;if(f2&&f6&&f8&&f9) ans++;dfs(u*10+2,1,f6,f8,f9);dfs(u*10+6,f2,1,f8,f9);dfs(u*10+8,f2,f6,1,f9);dfs(u*10+9,f2,f6,f8,1);
}int main(){cin>>n;dfs(0, 0, 0, 0, 0);cout<<ans;return 0;
}

2023首届大学生算法大赛——补题相关推荐

  1. 2023首届大学生算法大赛 - 村庄

    读题可以发现,如果两个村庄不能互相连通,那就算作一对 (a<b). 显然是可以用floyd全局多源最短路来做的,如果不存在最短路,那么就是不能互通,但是这道题的数据范围N<=10^5,跑f ...

  2. 2023首届大学生算法大赛 - 逆序对

    一眼应该能看出来这道题朴素算法是冒泡排序,但是逆序对这类题要求复杂度小于等于O(nlogn), 因此可以用线段树,树状数组,归并排序之类的试试. 洛谷上有一样的题:逆序对 - 洛谷 AC代码(归并排序 ...

  3. 2023首届大学生算法大赛 - 拿饼干

    读题可以发现是分组背包问题,但是要求每个组别至少用上一个,所以调用的前一种状态必须是已经含有前一组的物品,打个标记即可. #include <bits/stdc++.h> using na ...

  4. 吉首大学第七届“新星杯”程序设计大赛---补题概况

    吉首大学第七届"新星杯"程序设计大赛---补题http://120.78.162.102/contest.php?cid=1332 先来发图片...(唉...AC九道,就A不动了, ...

  5. 2022全国大学生数据分析大赛A题完整解题教程及代码 医药电商销售数据分析

    题目 A:医药电商销售数据分析 完整解题 随着国家政策的逐步开放,越来越多的药品可以在网络上购买, 医药电商平台蒸蒸日上,受新冠疫情的影响,线下药店购买困难,更 让医药电商进入了更多消费者的视野,各大 ...

  6. 2022全国大学生数据分析大赛A题-医药电商销售数据分析

    新手参加比赛,不足之处敬请谅解 题目链接:链接:https://pan.baidu.com/s/1ll7Y1kTr1MiJTjErwnqiVA  提取码:zu9f 目录 任务1 对店铺进行分析 任务1 ...

  7. 2021江苏大学生编程大赛I题(省赛试水)

    题目:  问题 - I - 代码强制 (codeforces.com)https://codeforces.com/gym/103495/problem/I题意: 就是给了m,n,从0到2^m-1挑出 ...

  8. 吉首大学第十届“新星杯”大学生程序设计大赛 A题题解

    这是一场很毒瘤的比赛. 鲁大师在一个星期前通知我们去打这场比赛,说名次高的有奖品,还说去年他们去参加这场比赛拿了前几名拿了个U盘-(疯狂暗示比赛很简单比赛很简单 ) 单纯的我真的信了 赛后得知这场比赛 ...

  9. 湖南省第六届大学生程序设计大赛原题 F Biggest Number (UVA1182)

    Biggest Number http://acm.hust.edu.cn/vjudge/contest/view.action?cid=30851#problem/F 解题思路:DFS(检索)+BF ...

最新文章

  1. 【日志】2011.12.24
  2. mysql relay log_windows下mysql主从出现Failed to open the relay log(relay_log_pos 248)解决办法...
  3. linux 编译 编解码
  4. 简单web服务器学习总结
  5. php新浪api,php调用新浪短链接API的方法,php调用新浪api_PHP教程
  6. hubbledotnet 远程连接提示:无法从传输连接中读取数据:远程主机强迫关闭一个现有的连接...
  7. C#学习笔记(集合)
  8. Linux命令学习笔记之一目录与文件基本操作
  9. Docker 基础技术之 Linux namespace 源码分析
  10. Pyplot绘图的格式
  11. java jtable导出txt_如何将jtable中的文本数据保存到文件中
  12. 【报告分享】2020成人用品报告-京东大数据研究院.pdf(附下载链接)
  13. 全国各地 DNS 服务器 IP 总汇
  14. php 利用cookie实现访问次数统计
  15. 【JavaScript 插件】实现图片倒影效果 - reflex.js
  16. Java JSch 远程执行 Shell 命令
  17. 斐讯路由器K2弹广告-刷机过程
  18. 汤姆猫代码python_iOS开发:纯代码实现汤姆猫小游戏
  19. 针式打印机偏移测试软件,精打教程(3)打印机打印偏移设置
  20. shell判断大于、小于、等于

热门文章

  1. win10系统如何关闭服务器,win10命令关闭服务器该怎么操作关闭?
  2. hbase(十)merge region
  3. 站立者的心,只有努力努力再努力
  4. 华为手机怎么用计算机玩隐藏空间,华为隐私空间怎么用?开启隐私空间私人信息存储更安全...
  5. 耳中明珠绾臂金环:古代女子私妆的故事(组图)
  6. Linux FTDI
  7. ai如何做倒角和圆角_AI怎么将直角矩形设置成圆角-AI将直角矩形设为圆角的方法 - 河东软件园...
  8. android mail发送邮件(包含163邮箱及qq邮箱,使用mail.jar,activation.jar,additionnal.jar)
  9. Jetson TX2 重装系统(刷机)+后续设置(安装Fcitx、解决拼音候选词不显示、换国内源、局域网实现VNC远程桌面)
  10. [附源码]计算机毕业设计Python校园运动会管理系统(程序+源码+LW文档)