中山DAy2——普及
今天挺不友好的,早上忘记定闹钟,晚了半小时起床,然后早上信心满满打算弄他个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——普及的更多相关文章
- 中山Day10——普及
今天又是愚蠢的一天,估分230,实得110.其中T2.4不会,这里就只说题意和简要思路. 收获:scanf>>a,以及printf<<a. T1:模板题 此题相对简单,就是读入 ...
- 中山Day5——普及
今天题目真是贼难呐...才38... 收获:树状数组单个修改 树状数组区间修改 T1:旅行 题意:有n个数,问;从中取任意个数,他们的和为质数的方案数是多少?(n<=50) 暴力模拟即可,这里不 ...
- 中山Day4——普及
生活开始日益平淡了呢...今天130分. 收获:归并排序求逆序对 背包问题(01.完全.多重)(外带滚动数组优化) T1:题目链接(才不会告诉你们下面的代码也是洛谷上弄来的) 思路:动态规划.首先,设 ...
- [GDKOI2021] 普及组 Day2 总结
[ G D K O I 2021 ] 普 及 组 D a y 2 总 结 [GDKOI2021] 普及组 Day2 总结 [GDKOI2021]普及组Day2总结 时间安排和昨天的GDKOI2021 ...
- 中山纪中集训Day4双是测试(划沝) 九校联考-DL24凉心模拟Day2
A组T1 锻造 (forging) 1.1 题目背景 勇者虽然武力值很高,但在经历了多次战斗后,发现怪物越来越难打于是开始思考是不是自己平时锻炼没到位,于是苦练一个月后发现......自己连一个史莱姆 ...
- 中山纪中集训Day2又是测试(划水)
A组T1 bzoj 2674 Attack Description chnlich 非常喜欢玩三国志这款游戏,并喜欢用一些策略出奇制胜.现在,他要开始征服世界的旅途了.他的敌人有N 座城市和N 个太守 ...
- 2019中山纪念中学夏令营-Day2[JZOJ]
博客的开始,先聊聊代码实现: 每次比赛以后,要有归纳错误的习惯. 错误小结: 1.读入:scanf(“%c”)会读入回车和空格,但cin不会. 2.对于二维数组的输入,不能把m,n搞混了,会引起严重的 ...
- 中山普及Day17——普及
今天换教室,本来教室多好嘛,易守难攻,结果...今天今天仅下午就被熊抄了2次,熊超真TMD不是人呐,走路连脚步声都没有. 然后,播报分数: 爆0了!!!
- 中山普及Day13——普及
又是迷之自信的说...估的230,考的50整,我欲上天呐!!! T1:深渊(怕不是黑暗种族聚集地???) 思路:动归.而且是简单动归.转移方程:Fi,j=max(Fi-1,j,Fi,j,Fi-1,(j ...
随机推荐
- turtle库常用命令
一, 海龟动作: 移动和绘制 forward()| fd() 前进多少 backward()|bk()|back()后退 right()|rt() 右转多少度 left() 左转多少度 goto()| ...
- 8,xhtml和html有什么区别
8,xhtml和html有什么区别 功能上有差别:xhtml可以兼容各大浏览器,手机,以及pda,浏览器也能快速准确地翻译网页 书写嘻惯的差别:xhtml必须正确的嵌套,闭合,区分大小写,文档必须有根 ...
- H2知识小结
1.官网: http://www.h2database.com/html/main.html file:///E:/Develop/H2/docs/html/tutorial.html#web_app ...
- Hadoop重新格式namenode后无法启动datanode的问题
这个很简单的哇~ 格式化namenode之后就会给namenode的ClusterId重新生成,导致与datanode中的ClusterId不一致而无法启动datanode 解决方法: 进入hadoo ...
- C语言:判断t所指字符串中的字母是否由连续递增字母组成。-判断一个输入的任何整数n,是否等于某个连续正整数序列之和。-将一副扑克牌编号为1到54,以某种方式洗牌,这种方式是将这副牌分成两半,然后将他们交叉,并始终保持编号1的牌在最上方。
//判断t所指字符串中的字母是否由连续递增字母组成. #include <stdio.h> #include <string.h> void NONO(); int fun( ...
- 一个含有Fibonacci Number的级数
\[\Large\displaystyle \sum_{n=0}^\infty \frac{1}{F_{2n+1}+1}=\frac{\sqrt5}{2}\] \(\Large\mathbf{Proo ...
- Catalyst 2960 重启?
在实际的网络环境中,交换机的各种问题层出不穷,这里我遇到一个案例.关于Cisco 2960 S 交换机重启的问题. 故障描述:有那么几台C2960S交换机总是随机的重启. 原因:从show ver来 ...
- 安装Ubuntu后的一些配置
Ubuntu安装的一些配置 搜狗拼音的安装 卸载ibus和它的配置, 卸载顶部面板的键盘指示 sudo apt remove ibus sudo apt purge ibus sudo apt rem ...
- 【PAT甲级】1051 Pop Sequence (25 分)(栈的模拟)
题意: 输入三个正整数M,N,K(<=1000),分别代表栈的容量,序列长度和输入序列的组数.接着输入K组出栈序列,输出是否可能以该序列的顺序出栈.数字1~N按照顺序随机入栈(入栈时机随机,未知 ...
- 基础总结篇之八:创建及调用自己的ContentProvider
转自:http://blog.csdn.net/wellsoho/article/details/49494141 若不能坚持到底,即使是朽木也不能折断:只要坚持不停地用刀刻,就算是金属玉石也可以雕出 ...