- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[数学]06-简单算法
题目列表 Robot motion (zju1708, 模拟) Zero sum( USACO 36, 枚举) Mixing milk(usaco76, 贪心) Extended Lights Out( zju 1354, 枚举+贪心) Gone fishing(北美中东部区域赛题目,枚举+贪心) Copying books(zju2002, 二分+贪心) 分析 显然按键是顺序无关的,而且最多按一次(按两次相当于不按)。 最直接的想法:30个按键,每个有两种操作选择,总共要枚举230 =1073741824种方案。本题时限1秒,此方法行不通。 进一步分析 考虑如图所示的操作: X 点击 第2行第2列 X 1 2 3 4 5 1 2 3 4 5 6 1 2 3 4 5 1 2 3 4 5 6 1 2 3 4 5 1 2 3 4 5 进一步分析 考虑如图所示的操作: X X 点击第2行第2列 X X 点击 第2行第3列 1 2 3 4 5 6 1 2 3 4 5 6 进一步分析 考虑如图所示的操作: X X X 点击第2行第2列 点击第2行第3列 点击 第2行第5列 X X X 1 2 3 4 5 1 2 3 4 5 6 1 2 3 4 5 1 2 3 4 5 6 进一步分析 考虑如图所示的操作: X X X 点击第2行第2列 点击第2行第3列 点击第2行第5列 进一步分析 只有在第2行的操作才能使第1行全灭。 在3、4、5行的操作对1行完全没影响。 X X X 点击2行2列 点击2行3列 点击2行5列 进一步分析 如果第2行的操作没有使第1行全灭, 则后面对3、4、5行进行的操作都无任何实质作用。 X X 点击2行2列 点击2行3列 进一步分析 这也说明第2行的操作受第1行亮灭的情况约束。 如果第1行某列亮着,则在它的下一行同一列点击。 X X X 点击2行2列 点击2行3列 点击2行5列 进一步分析 保证了第1行全灭,第2行未必全灭, 于是需要第3行的操作。 X X X X 进一步分析 后面各行的操作都受其上一行约束 X X X X X X X X X X X X X X X X X 进一步分析 各行操作结束后,判断最后一行是否全灭。 全灭,则答案就找到了;否则考虑改变第1行。 X X X X X X X X 进一步分析 因为只有第1行的操作没有约束。 X X X X X X X X 解决 毫无疑问,有哪些信誉好的足球投注网站之。第1行有6个格,每格点或不点,共26=64种状态。 不再是起初凭直觉的遍历1073741824个状态,效率大大提高了。 要是按列来考虑,第1列有5个格,有哪些信誉好的足球投注网站25=32个状态就可以了。 程序实现 #includeiostream.h #includememory.h void process();//求解的过程 void press(int,int);//处理按键的过程 void output();//输出结果 int lights[5][6];//记录灯状态,0灭,1亮 int ans[5][6];//记录结果,若在x行y列点击,ans[x-1][y-1]=1 int main(){ //主函数 int n; cinn; for(int i=1;i=n;i++){ cout PUZZLE # iendl; process(); //求解过程 } } void process(){ int x,y,z,temp[5][6]; for(x=0;x5;x++) for(y=0;y6;y++) cintemp[x][y]; for(z=0; z64; z++){ //外循环,枚举64个状态 memcpy(lights, temp, sizeof(lights)); memset(ans, 0, sizeof(ans));//初始化 for(y=0; y6; y++) if (z (1y)) /* 如果z右起第y个bit位是‘1’则在第1行y列点击 */ press(0,y); //枚举第一行的64种操作。 for(x=1; x5; x++) for(y=0; y6; y++) if (lights[x-1][y] ==1) press(x,y);/*就是刚才所说的规则*/ for(y=0;y6;y++) if(lights[4][y]==1) b
您可能关注的文档
最近下载
- 四年级上道德与法治《学会识别广告》教学设计.pdf VIP
- 2024融合大语言模型DeepSeek技术新人教版语文七年级上册《第四单元》大单元整体教学设计[2022课标].pdf
- 监控系统项目完整技术标书.docx VIP
- 临床合理用药解读-质子泵抑制剂的处方和医嘱审核要点解读(PPT课件).pptx VIP
- 山东省化工装置安全试车工作规范 DB37_T 1854—2020 山东.pdf VIP
- 安徽—夏凯月—课件—直线的倾斜角与斜率.pptx VIP
- 房屋租赁合同,房屋租赁合同,房屋租赁合同.docx VIP
- 安徽—夏凯月—设计—直线的倾斜角与斜率.docx VIP
- 业务学习-子宫脱垂.pptx VIP
- 海尔风冷模块样册.pdf
文档评论(0)