链接:第二次小练

这次是我们这组出的题目~我出了一道......B-Prison rearrangement,感觉有点复杂~不过其实题目想通了还是很简单的......

@荆红浅醉出的是A、C、D,@从此不再出的是E——一道很尼玛的二分......题目难懂啊~~~

这一次很凑巧,大家出的题目的题面都是英文而且....比较长......不过这都是巧合.....= =

A.Monkey and Banana HDU 1069

B.Prison rearrangement POJ 1636

题意:就是两个监狱换犯人,他们想换一半,但是发现两个监狱的有部分犯人不能放在一个监狱里,否则会有危险,就问在尽可能换一半犯人前提下,最多能换多少犯人~(就觉得这个想换犯人的长官是没事找抽型……= =)

方法简析:先是用DFS搜索两个监狱,看换犯人的话有多少是要同时换的(即不能在一个监狱)。【注:DFS要搜索两遍,一遍是从A监狱,一遍是从B监狱,这是要保证都不能在同意监狱的被搜索到~】再找出最多要换的人数~

代码:

 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; bool vis[][],map[][],dp[][]; //vis[0][i]代表的是A监狱i号犯人;vis[1][i]代表的是B号监狱i号犯人~~~;map记录的是两个监狱里的犯人是否有关联
int m,r,asize,bsize; //asize,bsize分别代表A、B监狱要换的人数 void DFS(int p,int id)
{
vis[p][id]=;
int i;
if(p==)
{
asize++;
for(i=;i<=m;i++)
if(!vis[][i] && map[id][i]) //若未标记,则搜索与该点不能呆在一起的犯人~
DFS(,i);
}
else
{
bsize++;
for(i=;i<=m;i++)
if(!vis[][i] && map[i][id]) //若未被标记,则搜索与该点不能呆在一起的犯人~~
DFS(,i);
}
} void bag()
{
dp[][]=true;
for(int i=m/;i>=asize;i--)
for(int j=m/;j>=bsize;j--)
if(dp[i][j] || dp[i-asize][j-bsize]) dp[i][j]=true; //对搜索到的两个监狱的人数进行标记~
} int main()
{
int t,a,b,i;
scanf("%d",&t);
while(t--)
{
memset(vis,,sizeof(vis));
memset(map,,sizeof(map));
memset(dp,,sizeof(dp));
scanf("%d%d",&m,&r);
for(i=;i<r;i++)
{
scanf("%d%d",&a,&b);
map[a][b]=;
}
for(i=;i<=m;i++)
if(!vis[][i])
{
asize=;
bsize=;
DFS(,i);
bag();
}
for(i=;i<=m;i++)
if(!vis[][i])
{
asize=;
bsize=;
DFS(,i);
bag();
}
for(i=m/;i>=;i--)
if(dp[i][i]) /*若在前面搜索中出现A、B两个监狱搜索的人数一样多,并人数小于m/2,即该人数是符合要求的,那么就输出该人数~从后面开始搜是为了保证得到的是最大值*/
{
printf("%d\n",i);
break;
}
}
return ;
}

//memory:228KB  time:79ms

C.Design T-Shirt HDU 1031

水到爆的题目..............没什么好讲的~

代码:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; class Shuchu
{
public:
double sum;
int id;
}a[]; bool comp(Shuchu q,Shuchu w)
{
if(q.sum==w.sum)
return q.id<w.id;
return q.sum>w.sum;
}
bool cmp(Shuchu q,Shuchu w)
{
return q.id>w.id;
} double b[][]; int main()
{
int p,e,ne,i,j; while(scanf("%d%d%d",&p,&e,&ne)!=EOF)
{
for(i=;i<p;i++)
for(j=;j<e;j++)
scanf("%lf",&b[i][j]);
memset(a,,sizeof(a));
for(i=;i<e;i++)
for(j=;j<p;j++)
{
a[i].sum+=b[j][i];
a[i].id=i+;
}
sort(a,a+e,comp);
sort(a,a+ne,cmp);
for(i=;i<ne-;i++)
printf("%d ",a[i].id);
printf("%d\n",a[ne-].id);
}
return ;
}

//memory:720KB  time:62ms

D.Wooden Sticks HDU 1051

与前不久做的俄罗斯套娃的题目十分相似~WA了几次是没有考虑到,俄罗斯套娃中相同的娃娃不能套在一起,但是这道题是可以的~但我就完全按照俄罗斯套娃做了,结果.......= =内牛满面啊.....

代码:

 #include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std; class Point
{
public:
int x,y,id;
}a[]; bool comp(Point q,Point w)
{
if(q.x==w.x)
return q.y>w.y;
return q.x>w.x;
} int main()
{
int t,n,i,j,number,minn;
scanf("%d",&t);
while(t--)
{
memset(a,,sizeof(a));
scanf("%d",&n);
for(i=;i<n;i++)
scanf("%d%d",&a[i].x,&a[i].y);
sort(a,a+n,comp);
number=;
minn=;
for(i=;i<n;i++)
if(a[i].id==)
{
a[i].id=;
number++;
minn=a[i].y;
for(j=i+;j<n;j++)
{
if(a[j].id== && a[j].y<=minn )
{
a[j].id=;
minn=a[j].y;
}
}
}
printf("%d\n",number);
}
return ;
}

//memory:288KB time:15ms

E.Cable master HDU 1551

//神二分啊~刚开始听说是二分,自己还小庆幸了一下.......结果.......尼玛题目都看不懂啊.......= =

8-7-Exercise的更多相关文章

  1. MIT 6.828 JOS学习笔记12 Exercise 1.9

    Lab 1中Exercise 9的解答报告 Exercise 1.9: 判断一下操作系统内核是从哪条指令开始初始化它的堆栈空间的,以及这个堆栈坐落在内存的哪个地方?内核是如何给它的堆栈保留一块内存空间 ...

  2. MIT 6.828 JOS学习笔记13 Exercise 1.10

    Lab 1 Exercise 10 为了能够更好的了解在x86上的C程序调用过程的细节,我们首先找到在obj/kern/kern.asm中test_backtrace子程序的地址, 设置断点,并且探讨 ...

  3. MIT 6.828 JOS学习笔记11 Exercise 1.8

    Exercise 1.8       我们丢弃了一小部分代码---即当我们在printf中指定输出"%o"格式的字符串,即八进制格式的代码.尝试去完成这部分程序. 解答: 在这个练 ...

  4. MIT 6.828 JOS学习笔记8. Exercise 1.4

    Lab 1 Exercise 4 阅读关于C语言的指针部分的知识.最好的参考书自然是"The C Programming Language". 阅读5.1到5.5节.然后下载poi ...

  5. MIT 6.828 JOS学习笔记9. Exercise 1.5

    Lab 1 Exercise 5 再一次追踪一下boot loader的一开始的几句指令,找到第一条满足如下条件的指令处: 当我修改了boot loader的链接地址,这个指令就会出现错误. 找到这样 ...

  6. MIT 6.828 JOS学习笔记5. Exercise 1.3

    Lab 1 Exercise 3 设置一个断点在地址0x7c00处,这是boot sector被加载的位置.然后让程序继续运行直到这个断点.跟踪/boot/boot.S文件的每一条指令,同时使用boo ...

  7. MIT 6.828 JOS学习笔记3. Exercise 1.2

    这篇博文是对Lab 1中的Exercise 2的解答~ Lab 1 Exercise 2: 使用GDB的'si'命令,去追踪ROM BIOS几条指令,并且试图去猜测,它是在做什么.但是不需要把每个细节 ...

  8. Stanford coursera Andrew Ng 机器学习课程编程作业(Exercise 2)及总结

    Exercise 1:Linear Regression---实现一个线性回归 关于如何实现一个线性回归,请参考:http://www.cnblogs.com/hapjin/p/6079012.htm ...

  9. stanford coursera 机器学习编程作业 exercise 3(逻辑回归实现多分类问题)

    本作业使用逻辑回归(logistic regression)和神经网络(neural networks)识别手写的阿拉伯数字(0-9) 关于逻辑回归的一个编程练习,可参考:http://www.cnb ...

  10. Stanford coursera Andrew Ng 机器学习课程编程作业(Exercise 1)

    Exercise 1:Linear Regression---实现一个线性回归 在本次练习中,需要实现一个单变量的线性回归.假设有一组历史数据<城市人口,开店利润>,现需要预测在哪个城市中 ...

随机推荐

  1. POJ 1129 Channel Allocation 四色定理dfs

    题目: http://poj.org/problem?id=1129 开始没读懂题,看discuss的做法,都是循环枚举的,很麻烦.然后我就决定dfs,调试了半天终于0ms A了. #include ...

  2. C语言2048

    这段时间google上有个小游戏挺火的,我也很喜欢,业余时间做个C语言版的. 老规矩先上干货: http://files.cnblogs.com/GhostZCH/2048.rar (.c & ...

  3. rabbitmq 测试

    --*-- import pika import datetime connection = pika.BlockingConnection(pika.ConnectionParameters( 'l ...

  4. git的id_rsa.pub的生成(也就是github上的SSH Keys)

    只需要一条语句就可以实现生成id_rsa.pub和id_rsa的目的:ssh-keygen -t rsa -C your_email 注意:这个邮箱是你github上的邮箱.只有在gthub上添加了这 ...

  5. [刷机教程] 三星Note8 N5100不卡屏的唯一解决办法--落雨刷机教程

    首先我自己写了一个word,在附件里.大概23页,图文并茂.附带三星NOTE8 N5100 MD2下载包 刷机要谨慎啊,小伙伴们. 刷机教程已经上传到我本人的网站:点击进入去看吧.和word一样. h ...

  6. ember.js

    http://blog.geoinker.com/2012/12/29/seven-javascript/ http://www.csdn.net/article/2013-04-15/2814893 ...

  7. DZ的伪静态神马的终于OK了

    十分感谢开发“凤凰图集”的onexin团队!帮忙搞定了伪静态!这玩意儿折腾了俺好多功夫,人家瞬间就搞定.

  8. DZ真是各种强大

    近期对论坛做了大装修,非常享受这个过程. 真是着迷了,这个装修工程让我接连几天几乎到了废寝忘食的地步. 终于告一段落,又想起来折腾,因为对之前的文库系统感觉种种别扭. 没有空调,没有风扇,居然忙到夜里 ...

  9. Java SE/ME/EE的概念介绍

    转自 Java SE/ME/EE的概念介绍 多数编程语言都有预选编译好的类库以支持各种特定的功能,在Java中,类库以包(package)的形式提供,不同版本的Java提供不同的包,以面向特定的应用. ...

  10. phpStorm 使用技巧大集合

    之前整理了一部分使用技巧了,但是在实际操作中发现phpstorm的技巧实在是太多了,所以大部分都统一整理到这篇文字中 ,备用 插件1 1:phpstrom的插件Provides live edit H ...