2022寒假集训day3
day3:四道检测题,花了大半天时间。
T1
子集和问题
问题描述
子集和问题的一个实例为<S,c>。其中S={x1,x2,…,xn}是一个正整数的集合,c是一个正整数。子集和问题判定是否存在S的一个子集S1,使得S1中所有元素的和为c
找不到原题了
#include <bits/stdc++.h>
using namespace std;
int n,a[10000000],b[10000000];
int m,i,k=1,s=0;
bool f[10000000];
void print(int k)
{
for (i=1;i<=k;++i)cout<<b[i]<<" ";
exit(0);
} void search(int k,int s,int m)
{
int i;
if (s>m)return;
if (k>n){cout<<"No Solution!";exit(0);}
for (i=1;i<=n;++i)
if (f[i])
{
f[i]=false;
s=s+a[i];
b[k]=a[i];
if (s==m){print(k);}
else search(k+1,s,m);
s=s-a[i];
f[i]=true;
b[k]=0;
}
return ;
} int main()
{
cin>>n; cin>>m;
for (i=1;i<=n;++i)
cin>>a[i];
for (i=1;i<=n;++i)
f[i]=true;
search(k,s,m);
return 0;
}
坑很多啊,除了不要忘记无解,而且No,Solution的S 也需要大写,就无语。硬是卡了很长时间,去做后面的题
这道题大体就是对集合的整体先搜索一遍,然后选取某几个元素与定值相等,并输出这几个元素。
————————————————————————————————————————
T2
工作分配问题
设有n件工作分配给n个人。将工作i分配给第j个人所需的费用为 c i j c_{ij} cij。试设计一个算法,为每一个人都分配1件不同的工作,并使总费用达到最小。
设计一个算法,对于给定的工作费用,计算最佳工作分配方案,使总费用达到最小。
Input
输入数据的第一行有1 个正整数n (1≤n≤20)。接下来的n行,每行n个数,表示工作费用。
Output
将计算出的最小总费用输出。
#include <bits/stdc++.h>
using namespace std;
#define N 1000
int cost[N][N];
int b[N]={0};
int n;
int sum;
void search(int i,int c)
{
if(c>sum) return;
if(i==n) {
if(c<sum) sum=c;
return;
}
for(int j=0;j<n;j++) {
if(b[j]==0) {
b[j]=1;
search(i+1,c+cost[i][j]);
b[j]=0;
}
}
} int main()
{
cin>>n;
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) {
cin>>cost[i][j];
}
}
sum = N;
search(0,0);
cout<<sum;
return 0;
}
T2就是我写起来相对得心应手的一题了,在T1上死磕之后看到它显得无比亲切。
虽然之前做过类似的,整体思路还算清楚,写起来也还是有些犹豫。尤其是中间的search,和T1的不同,而是类似全部枚举再进行比较。
————————————————————————————————————————
T3
装载问题
题目描述
有一批共 n 个集装箱要装上艘载重量为 c 的轮船,其中集装箱 i 的重量为 wi 。找出一种最优装载方案,将轮船尽可能装满,即在装载体积不受限制的情况下,将尽可能重的集装箱装上轮船。
输入
第一行有2个正整数n和c。n是集装箱数,c是轮船的载重量。第2行中有n个正整数,表示集装箱的重量(0<n<10000,0<c<32767)。
输出
计算出的最大装载重量输出。
#include<bits/stdc++.h>
using namespace std;
int maxx,ans,n,c,sz[10000];
void search(int i,int k=0) {
if(maxx>c) return ;
if(k==i+1) {
ans=max(ans,maxx);
return ;
}
if(maxx+sz[k]<=c) {
maxx+=sz[k];
search(i,k+1);
maxx-=sz[k];
}
search(i,k+1);
}
int main() {
cin>>n>>c;
for(int i=1; i<=n; i++)
cin>>sz[i];
sort(sz+1,sz+n+1);
search(n);
cout<<ans<<endl;
return 0;
}
困扰了很长时间,虽是第三题但却是最后一个做出来的。
尽可能的去寻找最大的重量使船尽可能的装满。
首先读题不仔细,应该把整道题全部读懂并且有具体思路之后在写代码,而不是边想边写,会使效率低下,并且一直困扰在一个位置。
————————————————————————————————————————
T4
字符序列
从三个元素的集合[A,B,C]中选取元素生成一个N个字符组成的序列,使得没有两个相邻字的子序列(子序列长度=2)相同。例:N = 5时ABCBA是合格的,而序列ABCBC与ABABC是不合格的,因为其中子序列BC,AB是相同的。
对于由键盘输入的N(1<=N<=12),求出满足条件的N个字符的所有序列和其总数。
测试数据:
输入:4
输出:72
#include <bits/stdc++.h>
using namespace std; int n,sum=0;
int ans[15];
bool pd()
{
int cnt=0;
for(int i=3; i<=n; i++)
{
if(ans[i]==ans[i-2])
cnt++;
else cnt=0; if(cnt==2)
return 0;
}
return 1;
}
void dfs(int x)
{
if(x==n+1)
{
if(pd())
sum++;
return;
}
for(int i=1;i<=3;i++)
{
ans[x]=i;
dfs(x+1);
}
}
int main()
{ scanf("%d",&n);
dfs(1);
printf("%d",sum);
return 0;;
}
前面一直在用search,这道就换成深搜了。
思路还算清晰,很快就qie掉了。
本日总结:
search掌握不算太熟练,做题分析不到位,细节浪费很长时间。
对一些算法也进行了强化,但还是有所欠缺,多加练习。
2022寒假集训day3的更多相关文章
- 2022寒假集训day2
day1:学习seach和回溯,初步了解. day2:深度优化搜索 T1 洛谷P157:https://www.luogu.com.cn/problem/P1157 题目描述 排列与组合是常用的数学方 ...
- HZNU-ACM寒假集训Day3小结 搜索
简单搜索 1.DFS UVA 548 树 1.可以用数组方式实现二叉树,在申请结点时仍用“动态化静态”的思想,写newnode函数 2.给定二叉树的中序遍历和后序遍历,可以构造出这棵二叉树,方法是根据 ...
- 2022寒假集训day6
day6上午还是做四道题T1区域[上机练习]1.编程计算由"*"号围成的下列图形的面积.面积计算方法是统计*号所围成的闭合曲线中水平线和垂直线交点的数目.如下图所示,在 10*10 ...
- 2022寒假集训day5
day5 五道栈的题加上字符串. 单调队列. T1 表达式括号匹配 洛谷P1739 题目描述 假设一个表达式有英文字母(小写).运算符(+,-,*,/)和左右小(圆)括号构成,以"@&q ...
- 2022寒假集训day4
day4(day5补完的) 继续刷搜索方面的题, 初步了解了序列. T1 迷宫问题 题目描述设有一个 n*n 方格的迷宫,入口和出口分别在左上角和右上角.迷宫格子中分别放 0 和 1 ,0 表示可通, ...
- 【LOJ6067】【2017 山东一轮集训 Day3】第三题 FFT
[LOJ6067][2017 山东一轮集训 Day3]第三题 FFT 题目大意 给你 \(n,b,c,d,e,a_0,a_1,\ldots,a_{n-1}\),定义 \[ \begin{align} ...
- 【LOJ#6066】「2017 山东一轮集训 Day3」第二题(哈希,二分)
[LOJ#6066]「2017 山东一轮集训 Day3」第二题(哈希,二分) 题面 LOJ 题解 要哈希是很显然的,那么就考虑哈希什么... 要找一个东西可以表示一棵树,所以我们找到了括号序列. 那么 ...
- CSU-ACM寒假集训选拔-入门题
CSU-ACM寒假集训选拔-入门题 仅选择部分有价值的题 J(2165): 时间旅行 Description 假设 Bobo 位于时间轴(数轴)上 t0 点,他要使用时间机器回到区间 (0, h] 中 ...
- 2019暑期金华集训 Day3 字符串
自闭集训 Day3 字符串 SAM 考虑后缀树. SAM的parent树是反串的后缀树,所以后面加一个字符的时候相当于往串前面加一个字符,恰好多出了一个后缀. 于是可以以此来理解SAM. 每一条路径对 ...
随机推荐
- Debug解决问题方法论
发现问题怎么办,如何处理, 所谓的Debug的一般流程是什么, 下面是我对此的一些思考总结, 后面还会继续完善补充. 1.处理思路总纲 发现问题 查看日志 没有日志,去找日志 找不到日志,继续找,有些 ...
- SpringBoot 之 静态资源路径、显示首页、错误页
静态资源路径 静态资源支持放在以下路径中,访问优先级从上到下: classpath:/META-INF/resources/ classpath:/resources/ classpath:/stat ...
- Selenium_环境安装(1)
Selenium是一个用于Web应用程序自动化测试工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样. Selenium基本上支持主流的浏览器,包括IE,Mozilla Firef ...
- Flask_Flask-Script脚本扩展的使用(八)
Flask-Script扩展包提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本,cronjobs,及其他运行在web应用之外的命令行 ...
- 基于Typescript和Jest刷题环境搭建与使用
写在前面 前几个月在公司用vue3和ts写项目,想巩固一下基础,于是我想起了去年基于JavaScript和Jest搭建的刷题环境,不如,给它搞个加强版,结合Typescript和Jest 搞一个刷题环 ...
- Easticsearch概述(API使用)二
Rest简介 一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务端互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制 Rest的操作分为以 ...
- No shutdown animation in the electricity display only 1%
低电量自动关机时无关机动画 低电量自动关机时无关机动画1. 问题描述2. 分析3. solution4. 总结 1. 问题描述 DEFECT DESCRIPTION: No shutdown anim ...
- 解决twrp中内部存储为0MB的情况
本来打算给备用机红米4a刷个dotos的系统,结果忘记双清就刷了,然后进去系统也是直接黑屏,很神奇的是长按电源键能弹出dotos的关机选项.然后进去twrp准备双清在刷时,发现内部存储变成了0MB,然 ...
- Servlet虚拟路径匹配规则
当 Servlet 容器接收到请求后,容器会将请求的 URL 减去当前应用的上下文路径,使用剩余的字符串作为映射 URL 与 Servelt 虚拟路径进行匹配,匹配成功后将请求交给相应的 Servle ...
- IoC容器-Bean管理XML方式(p名称空间注入)
5,p名称空间注入(简化xml配置) (1)使用p名称空间注入,可以简化基于xml配置方式 (了解实际用不多) 第一步 添加 p 名称空间在配置文件中 第二步 进行属性注入,在bean标签里面进行 ...