今天挺不友好的,早上忘记定闹钟,晚了半小时起床,然后早上信心满满打算弄他个300分。结果……132.2分·。WTF???


T1:disease

题意:有n头奶牛,k种细菌(k<=15),给你每头奶牛携带的细菌种类,问:若让选出所有奶牛携带细菌少于d种,最多选几头奶牛?

思路:上手就用了动归,可能是昨天打积木那题,自己信心爆棚。然后……神奇的22.2分出炉啦!  之后,我痛定思痛,发现动归真的是伪得快。

正解:反正k小,把可能情况枚举一下,最多也没几种。不就是$C_k^d$种吗?然后比较打擂台就可以了。

见代码:

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int n,ans,d,k,inf=-0x3f3f3f,flag[],use[];
bool a[][];
void dfs(int x)
{
for(int i=use[x-]+;i<=d;i++)
{
if(flag[i]==)
{
flag[i]=;
use[x]=i;
if(x==k)
{
for(int j=;j<=n;j++)
{
for(int i=;i<=d;i++)
{
if(a[j][i]==true&&flag[i]==)
{
ans--;
break;
}
}
}
if(ans>inf)
inf=ans;
ans=n;
}
else
dfs(x+);
flag[i]=;
use[x]=;
}
}
}
int main()
{
scanf("%d%d%d",&n,&d,&k);
ans=n;
for(int i=;i<=n;i++)
{
scanf("%d",&a[][]);
for(int j=;j<=a[][];j++)
{
scanf("%d",&a[][]);
a[i][a[][]]=true;
}
}
dfs();
printf("%d",inf);
return ;
}

注意事项:

要开一个数组,依次向后走,去记录,万万不能从1到k来回搞,不然就不是$C_d^k$而是C!了。

好题哉!!!


T2: jumpcow

题意:有一个序列,你可以选择其中任意个数组成一个子序列,其中有个弹跳值,弹跳值为子序列奇数项的和乘上偶数项的和,问:弹跳值最大为多少?

思路:熟悉的操作,熟悉的味道——动归!一开始在考场上,把奇偶混在一起,没有分开奇数项和偶数项,只有10分。

正解:奇偶分开是什么意思呢?很简单。就是设一个二维数组:a[n][2],其中第二维为1表示此项做奇数项是的情况,第二维为0表示此项是偶数项的情况。

转移方程:a[n][1]=max(a[n-1][0]+a[n][1],a[n-1][1])这个意思就是:如果不选此项就是前一个奇数项,然后依次向后转移。若选此项就是前一项为偶数项那就加上。

同理:a[n][0]=max(a[n-1][1]-a[n][0],a[n-1][0])。

神奇的O(n)算法!

见代码:

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int n,max1=-0x3f3f3f,max2=-0x3f3f3f,inf=-0x3f3f3f;
int a[][];
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i][]);
}
for(int i=;i<=n;i++)
{
max1=-0x3f3f3f;
max2=-0x3f3f3f;
for(int j=;j<i;j++)
{
if(a[j][]>max1)
max1=a[j][];
if(a[j][]>max2)
max2=a[j][];
}
a[i][]=max1-a[i][];
a[i][]+=max2;
}
for(int i=;i<=n;i++)
{
if(inf<a[i][])
inf=a[i][];
if(inf<a[i][])
inf=a[i][];
}
printf("%d",inf);
return ;
}

好题哉!!!


T3:town

题意:有一个被水淹没小镇,给你小镇每块地的高度,每块地上的水可以流到上、下、左、右当中不高于它高度的格子里,可以在任何格子里安装一台水泵,水泵可以抽走无限量的水。问:最少需要安装几台水泵可以抽走所有的水?

正解:宽搜。先找到最低的格子,然后向高处拓展标记,如果没有抽完就找第二小的格子继续搜,以此类推。用一个变量记录一下次数即可。

见代码:

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int n,m,k,head,ans,tail=;
int h1[],l1[],p[]={,-,,,},y[]={,,,-,};
char a[][];
bool flag[][];
void bfs(int h,int l)
{
head=;
tail=;
h1[]=h;
l1[]=l;
flag[h][l]=true;
while(head!=tail)
{
head++;
for(int i=;i<=;i++)
{
if(a[h1[head]+p[i]][l1[head]+y[i]]>&&flag[h1[head]+p[i]][l1[head]+y[i]]==false&&a[h1[head]+p[i]][l1[head]+y[i]]>=a[h1[head]][l1[head]])
{
tail++;
h1[tail]=h1[head]+p[i];
l1[tail]=l1[head]+y[i];
flag[h1[tail]][l1[tail]]=true;
}
}
}
}
int main()
{
scanf("%d",&k);
for(int q=;q<=k;q++)
{
ans=;
memset(a,-,sizeof(a));
memset(flag,false,sizeof(flag));
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
cin>>a[i][j];
}
while()
{
bool flag2=false;
int min=0x3f3f3f,minh=,minl=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
if(a[i][j]<min&&flag[i][j]==false)
{
min=a[i][j];
minh=i;
minl=j;
flag2=true;
}
}
if(flag2==false)
break;
bfs(minh,minl);
ans++;
}
printf("%d\n",ans);
}
return ;
}

好题哉!!!


T4:cowtract

最大生成树模板题:没啥好讲的,博主也不会讲,上网搜呗。

见代码:

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int n,m,ans,ans1,fa[],flag;
struct cow{
int father,son,cost;
};
cow tree[];
bool cmp(cow x,cow y)
{
return x.cost>y.cost;
}
int find(int x)
{
if(fa[x]==x)
return x;
else
return fa[x]=find(fa[x]);
}
void add(int x,int y)
{
fa[fa[x]]=fa[y];
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
fa[i]=i;
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&tree[i].father,&tree[i].son,&tree[i].cost);
}
sort(tree+,tree++m,cmp);
for(int i=;i<=m;i++)
{
if(find(tree[i].father)!=find(tree[i].son))
{
ans1++;
add(tree[i].father,tree[i].son);
ans+=tree[i].cost;
}
}
if(ans1==n-)
{
printf("%d",ans);
return ;
}
else
printf("-1");
return ;
}

好题哉!!!

中山DAy2——普及的更多相关文章

  1. 中山Day10——普及

    今天又是愚蠢的一天,估分230,实得110.其中T2.4不会,这里就只说题意和简要思路. 收获:scanf>>a,以及printf<<a. T1:模板题 此题相对简单,就是读入 ...

  2. 中山Day5——普及

    今天题目真是贼难呐...才38... 收获:树状数组单个修改 树状数组区间修改 T1:旅行 题意:有n个数,问;从中取任意个数,他们的和为质数的方案数是多少?(n<=50) 暴力模拟即可,这里不 ...

  3. 中山Day4——普及

    生活开始日益平淡了呢...今天130分. 收获:归并排序求逆序对 背包问题(01.完全.多重)(外带滚动数组优化) T1:题目链接(才不会告诉你们下面的代码也是洛谷上弄来的) 思路:动态规划.首先,设 ...

  4. [GDKOI2021] 普及组 Day2 总结

    [ G D K O I 2021 ] 普 及 组 D a y 2 总 结 [GDKOI2021] 普及组 Day2 总结 [GDKOI2021]普及组Day2总结 时间安排和昨天的GDKOI2021 ...

  5. 中山纪中集训Day4双是测试(划沝) 九校联考-DL24凉心模拟Day2

    A组T1 锻造 (forging) 1.1 题目背景 勇者虽然武力值很高,但在经历了多次战斗后,发现怪物越来越难打于是开始思考是不是自己平时锻炼没到位,于是苦练一个月后发现......自己连一个史莱姆 ...

  6. 中山纪中集训Day2又是测试(划水)

    A组T1 bzoj 2674 Attack Description chnlich 非常喜欢玩三国志这款游戏,并喜欢用一些策略出奇制胜.现在,他要开始征服世界的旅途了.他的敌人有N 座城市和N 个太守 ...

  7. 2019中山纪念中学夏令营-Day2[JZOJ]

    博客的开始,先聊聊代码实现: 每次比赛以后,要有归纳错误的习惯. 错误小结: 1.读入:scanf(“%c”)会读入回车和空格,但cin不会. 2.对于二维数组的输入,不能把m,n搞混了,会引起严重的 ...

  8. 中山普及Day17——普及

    今天换教室,本来教室多好嘛,易守难攻,结果...今天今天仅下午就被熊抄了2次,熊超真TMD不是人呐,走路连脚步声都没有. 然后,播报分数: 爆0了!!!

  9. 中山普及Day13——普及

    又是迷之自信的说...估的230,考的50整,我欲上天呐!!! T1:深渊(怕不是黑暗种族聚集地???) 思路:动归.而且是简单动归.转移方程:Fi,j=max(Fi-1,j,Fi,j,Fi-1,(j ...

随机推荐

  1. NOIP--模拟—————神奇的幻方

    神奇的幻方 题目描述 幻方是一种很神奇的 N*N 矩阵:它由数字 1,2,3,-N x N 构成,且每行.每列及两条对角线上的数字之和都相同. 当 N 为奇数时,我们可以通过下方法构建一个幻方: 首先 ...

  2. 树莓派安装raspbian并配置开发环境

    1.烧录系统 首先准备好我们要烧录的raspbian系统,可以在树莓派官网中下载https://www.raspberrypi.org/downloads/ 这里我们选择 2018-11-13-ras ...

  3. Eclipse安装配置java项目

    设置智能提示

  4. 制作手风琴效果时发现新大陆,好吧,其实是一个bug

    手风琴效果代码: <!DOCTYPE html> <html>    <head>         <meta charset="utf-8&quo ...

  5. 图解 Kafka 水印备份机制

    高可用是很多分布式系统中必备的特征之一,Kafka 日志的高可用是通过基于 leader-follower 的多副本同步实现的,每个分区下有多个副本,其中只有一个是 leader 副本,提供发送和消费 ...

  6. (Java多线程系列九)线程池

    线程池 1.什么是线程池 线程池是指在初始化一个多线程应用程序过程中创建一个线程集合,然后在需要执行新的任务时重用这些线程而不是新建一个线程.线程池中线程的数量通常取决于可用内存数量和应用程序的需求. ...

  7. 15 个优秀开源的 Spring Boot 学习项目

    Spring Boot 算是目前 Java 领域最火的技术栈了,松哥年初出版的 <Spring Boot + Vue 全栈开发实战>迄今为止已经加印了 8 次,Spring Boot 的受 ...

  8. matplotlib学习(2)

    1.legend的学习(图例)1.1 代码 import matplotlib.pyplot as plt import numpy as np x=np.linspace(-3,3,50) #从-1 ...

  9. ASP.NET学习记录点滴

    1.判读是否是第一次请求,有表单的页面,第一次请求时get请求,而不是post请求,所以可以用来判断请求是否是get,在apsx页面中,有微软封装的属性IsPostBack来判断是否是get还是pos ...

  10. STM32F103_外部RAM用作运存

    概述 SRAM的简介 折腾过电脑的朋友都知道,当电脑运行比较卡的时候,我们可以通过给电脑加装内存条来改善电脑的性能.那么号称微型计算机的单片机能不能像电脑一样加装内存条呢?装内存条倒是不行,但是我们可 ...