杭电acm杭电ACM 2044题 为什么总是超时

杭电acm  时间:2021-08-21  阅读:()

杭电ACM 1011,能不能讲讲题目究竟是什么意思,到底该怎样分配部队?感谢大神!

就是说某个国家(Starship)有很多贪官(brains),他们在一些房间聚会,房间配置了一些保镖(bugs),作为反贪部队的队长你需要指挥部队(Troopers)去活捉贪官,(只有活捉才能追回赃款~(≧▽≦)/~啦啦啦),现在问题是留下一个小分队只能对付20个保镖,所以要利益最大化,需要合理配置每个房间的分队数,尽量多的活捉,其他的放毒气干掉;又因为他们聚会的房子连在一起,所以部队行进路线不能返回同一个房间(避免他们通风报信?)。

几个小提示, 1。

当一个房间无保镖有贪官,如果是中途路过的房间,就不需要留下小分队,否则就需要一个。

2。

N个房间N-1个连通门,说明是单连通的,所以要确定进攻路线 3。

就算计算好的最佳进攻路线中有些房间有贪官,有时也需要放弃,为了活捉最多 4。

下面的代码没有AC,有时错误,有时超时,因为是java写的?容易超时。

但一些基本的数据测试通过了;如果你用C,应该好优化 import java.util.ArrayList; import java.util.List; import java.util.Scanner; /** * for 杭电 ACM1011 * @author 718225250 * for more see * /qq718225250/article/details/8764380 */ public class Main{ public static class Cavern{ Integer id; int bugs; int brains; int troopers; boolean isPass = false;//是否已经过 List<Integer> next = new ArrayList<Integer>(); public Cavern(int id, int bugs, int brains){ this.id = Integer.valueOf(id); this.bugs = bugs; this.brains = brains; this.troopers = (bugs%20==0 ? bugs/20 : bugs/20+1); } } /** * 获得一次遍历的最大值 * @return */ public static int getMax(){ int Max =curMax; int id = _list.get(_list.size()-1); boolean hasNextForPass = false;/*是否还有下一个节点供遍历*/ for(int i=0;i< _caverns[id].next.size();i++){ Integer nextId = _caverns[id].next.get(i); if(!_caverns[nextId].isPass){ hasNextForPass = true; _list.add(nextId); _caverns[nextId].isPass = true; Max = getMax(); _caverns[nextId].isPass = false; _list.remove(_list.size()-1); } } if(!hasNextForPass){ int tempMax = getResult() ; if(tempMax > Max){ curMax = tempMax; Max = curMax; } } return Max; } /** * 获得结果 * @return */ public static int getResult(){ int result = 0; int tempTrooperNumber = __TrooperNumber; int tempResult = 0; boolean flag = true; for(int i =0; i < _list.size(); i++ ){ Integer id = _list.get(i); if(tempTrooperNumber >= _caverns[id].troopers){ tempTrooperNumber -= _caverns[id].troopers; tempResult += _caverns[id].brains; } else{ flag = false; break; } } if(flag){ result = tempResult; }else{ tempResult = 0; for(int i =0; i < _list.size(); i++ ){ Integer id = _list.get(i); _list.remove(id); tempResult = getResult(); if(tempResult > result){ result = tempResult; } _list.add(id); } } return result; } public static int __CavernNumber; public static int __TrooperNumber; public static Cavern[] _caverns; public static int curMax; public static final List<Integer> _list = new ArrayList<Integer>(); public static void main(String[] args){ Scanner in=new Scanner(System.in); while(true){ __CavernNumber = in.nextInt(); __TrooperNumber = in.nextInt(); if( __CavernNumber < 0 && __TrooperNumber < 0 ){ break; } else if(__CavernNumber == 0 || __TrooperNumber == 0){ System.out.println(0); } else{ _caverns = new Cavern[__CavernNumber]; for(int i=0;i<__CavernNumber;i++){ int bugs = in.nextInt(); int brains = in.nextInt(); _caverns[i] = new Cavern(i, bugs, brains); } for(int i=0;i<__CavernNumber-1;i++){ int m = in.nextInt(); int n = in.nextInt(); _caverns[m-1].next.add(n-1); _caverns[n-1].next.add(m-1); } curMax = 0; Integer start = Integer.valueOf(0); _caverns[0].isPass = true; _list.add(start); System.out.println(getMax()); } } } }

杭电ACM 1004,1005,1006,这三题是的意思是什么

我只说大概的意思。

能让你知道怎么做题。

1004:题意:结合数据的输入,给你N个汽球,接着给出这N个汽球的颜色,统计出现颜色最多的那个汽球并输出相对应的汽球颜色。

输入有多组。

以汽球个数N为0时结束输入。

1005:这题就一个数学公式的描述,就是输入三个数:A,B,n, 求当f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.时,求对应的f(n)的值。

输入有多组。

以输入三个0 0 0时,结束输入。

1006:多组输入一个D(0<=D <= 120),以及-1结束输入。

求时钟一天时,分,秒,三根针两两的角度至少为D的时间总和占一天时间的百分之几。

结果保留三位小数。

杭电ACM 2044题 为什么总是超时

你的递归扩展起来很可怕。

因为有很多是重复算的,例如: F(5) / F(4) F(3) / F(3) F(2) 在这里F(3)就要算两遍,这题需要把这种情况给解决,也就是说可以将递归改成递推,也可以用记忆化搜索的方法解决,也就是算第一遍mf(a,n)的时候就把这个值记住,下一次遇到这个值就直接拿不需要再进行递归计算,这样就可以把时间复杂度降低。

半月湾($59.99/年),升级带宽至200M起步 三网CN2 GIA线路

在前面的文章中就有介绍到半月湾Half Moon Bay Cloud服务商有提供洛杉矶DC5数据中心云服务器,这个堪比我们可能熟悉的某服务商,如果我们有用过的话会发现这个服务商的价格比较贵,而且一直缺货。这里,于是半月湾服务商看到机会来了,于是有新增同机房的CN2 GIA优化线路。在之前的文章中介绍到Half Moon Bay Cloud DC5机房且进行过测评。这次的变化是从原来基础的年付49....

MineServer:香港CMI/洛杉矶GIA VPS,2核/2GB内存/20GB NVME/3.5TB流量/200Mbps/KVM,288元/年

mineserver怎么样?mineserver是一家国人商家,主要提供香港CN2 KVM VPS、香港CMI KVM VPS、日本CN2 KVM VPS、洛杉矶cn2 gia端口转发等服务,云服务器网(yuntue.com)介绍过几次,最近比较活跃。现在新推出了3款特价KVM VPS,性价比高,香港CMI/洛杉矶GIA VPS,2核/2GB内存/20GB NVME/3.5TB流量/200Mbps...

LOCVPS全场8折,香港云地/邦联VPS带宽升级不加价

LOCVPS发布了7月份促销信息,全场VPS主机8折优惠码,续费同价,同时香港云地/邦联机房带宽免费升级不加价,原来3M升级至6M,2GB内存套餐优惠后每月44元起。这是成立较久的一家国人VPS服务商,提供美国洛杉矶(MC/C3)、和中国香港(邦联、沙田电信、大埔)、日本(东京、大阪)、新加坡、德国和荷兰等机房VPS主机,基于XEN或者KVM虚拟架构,均选择国内访问线路不错的机房,适合建站和远程办...

杭电acm为你推荐
网络设备图标网络那个图标为什么有个红叉,但有网络accesspoint如何将电脑成为手机wifi的access point化学键理论化学键的定义封包是什么这个七月半封包怎么填反恐精英维护到几点今天反恐精英几点维护完?安卓手机用什么安全软件好电脑管理安卓手机的软件哪个最好用ldap统一用户认证介绍NIPS是什么认证?wps表格数据恢复WPS表格如果变成这样怎么恢复公司注册如何办理个人如何申请注册公司短信认证工商银行口令卡的短信认证是什么意思?
域名大全 西安域名注册 已备案未注册域名 移动服务器租用 二级域名申请 域名备案信息查询 免费域名解析 oneasiahost 圣迭戈 美国仿牌空间 sockscap 光棍节日志 免费mysql 购买国外空间 shopex主机 如何建立邮箱 酸酸乳 1美元 服务器硬件配置 asp空间 更多