ecnu1244 积木游戏
找有这个题目的oj找的好辛苦
算法详见黑书119页
动态规划
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #include<algorithm> using namespace std; struct toy {int x;int y;int z; }p[110]; //1代表x和y在上 //2代表x和z在上 //3代表y和z在上 int d[110][110][110][4]; int n,m; //编号为1,2,,,,n //d[i][a][b][k]表示已经堆出了i个堆,已经考虑了a个木块,顶上木块编号为b,且k面朝上之后还能获得的最大高度 void init() {int i,j,k,l;for(i=0;i<=m+1;i++){for(j=0;j<=n+1;j++){for(k=0;k<=n+1;k++){for(l=0;l<=5;l++){d[i][j][k][l]=-1;}}}} } //编号为1,2,,,,n //d[i][a][b][k]表示已经堆出了i个堆,已经考虑了a个木块,顶上木块编号为b,且k面朝上之后还能获得的最大高度 bool check(toy a,int k,int x,int y) {int m,n;if(k==1){m=a.x;n=a.y;}if(k==2){m=a.x;n=a.z;}if(k==3){m=a.y;n=a.z;}if((x<=m&&y<=n)||(x<=n&&y<=m)){return true;}return false; } void found(int i,int a,int b,int k) {//处理编号a+1的木块//新起一堆的处理if(a==n){d[i][a][b][k]=0;return;}if(i<m){if(d[i+1][a+1][a+1][1]==-1){found(i+1,a+1,a+1,1);}if(d[i][a][b][k]<d[i+1][a+1][a+1][1]+p[a+1].z){d[i][a][b][k]=d[i+1][a+1][a+1][1]+p[a+1].z;}if(d[i+1][a+1][a+1][2]==-1){found(i+1,a+1,a+1,2);}if(d[i][a][b][k]<d[i+1][a+1][a+1][2]+p[a+1].y){d[i][a][b][k]=d[i+1][a+1][a+1][2]+p[a+1].y;}if(d[i+1][a+1][a+1][3]==-1){found(i+1,a+1,a+1,3);}if(d[i][a][b][k]<d[i+1][a+1][a+1][3]+p[a+1].x){d[i][a][b][k]=d[i+1][a+1][a+1][3]+p[a+1].x;}}//加在当前堆if(check(p[b],k,p[a+1].x,p[a+1].y)){if(d[i][a+1][a+1][1]==-1)//check判断是否合法 {found(i,a+1,a+1,1);}if(d[i][a][b][k]<d[i][a+1][a+1][1]+p[a+1].z){d[i][a][b][k]=d[i][a+1][a+1][1]+p[a+1].z;}}if(check(p[b],k,p[a+1].x,p[a+1].z)){if(d[i][a+1][a+1][2]==-1){found(i,a+1,a+1,2);}if(d[i][a][b][k]<d[i][a+1][a+1][2]+p[a+1].y){d[i][a][b][k]=d[i][a+1][a+1][2]+p[a+1].y;}}if(check(p[b],k,p[a+1].y,p[a+1].z)){if(d[i][a+1][a+1][3]==-1){found(i,a+1,a+1,3);}if(d[i][a][b][k]<d[i][a+1][a+1][3]+p[a+1].x){d[i][a][b][k]=d[i][a+1][a+1][3]+p[a+1].x;}}//弃置不用if(d[i][a+1][b][k]==-1){found(i,a+1,b,k);}if(d[i][a][b][k]<d[i][a+1][b][k]){d[i][a][b][k]=d[i][a+1][b][k];} } int main() {scanf("%d %d",&n,&m);int i;for(i=1;i<=n;i++){scanf("%d %d %d",&p[i].x,&p[i].y,&p[i].z);}init();found(0,0,0,0);printf("%d\n",d[0][0][0][0]);return 0; }
转载于:https://www.cnblogs.com/willzhang/archive/2012/08/03/2622287.html
ecnu1244 积木游戏相关推荐
- c语言幼儿园积木游戏,幼儿园《积木游戏》课件【三篇】
[导语]课件制作本身就是作者综合素养的一种体现,它显现出制作者对教育.教学.教材改革方向的把握,对课堂教学的理解,对现代教育技术的领悟.因此教师在设计课件时一定要吃透教学内容,设计出符合教学的方案用于 ...
- 计算机积木游戏,乐高积木模拟器
乐高积木模拟器是一款非常好玩的休闲小游戏,超好玩的拼积木游戏玩法,玩家需要将一个个积分方块拼接在一起,看似简单的玩法实则充满着挑战性,非常考验玩家的耐心.充分发挥自己的想象力,在这个游戏世界中玩耍,加 ...
- vijos 1464 积木游戏 DP
描述 积木游戏 SERCOI 最近设计了一种积木游戏.每个游戏者有N块编号依次为1 ,2,-,N的长方 体积木.对于每块积木,它的三条不同的边分别称为"a边"."b边&q ...
- [NOI 1997] 积木游戏(dp)
·题目描述 一种积木游戏,游戏者有N块编号依次为1,2,-,N的长方体积木.第I块积木通过同一顶点三条边的长度分别为ai,bi,ci(i=1,2,-,N),如图1所示: 游戏规则如下: 1 从N块积木 ...
- #bzoj2240#积木游戏(DP? 贪心?)
2240: 积木游戏 时间限制: 1 Sec 内存限制: 128 MB 题目描述 小时候我们都喜欢玩积木.这里的积木都是单位边长的正方体块,多个积木可以堆成一个"高木",&quo ...
- 积木游戏 (Standard IO)
题意/Description: 在一个N*N的区域玩积木游戏,每个单元格正好跟积木的底面相等,每个单元格里放有若干个积木,Alice想重新摆放积木,使得每个单元格最多只能放一个积木,并且所有积木正好形 ...
- 华为机试真题 Python 实现【相同数字的积木游戏】【2022.11 Q4 新题】
目录 题目 思路 考点 Code 题目 题目描述 小华和小薇一起通过玩积木游戏学习数学. 他们有很多积木,每个积木块上都有一个数字,积木块上的数字可能相同. 小华随机拿一些积木挨着排成一排,请小薇找到 ...
- 算法提高 盾神与积木游戏
算法提高 盾神与积木游戏 时间限制:1.0s 内存限制:256.0MB 问题描述 最近的m天盾神都去幼儿园陪小朋友们玩去了~ 每个小朋友都拿到了一些积木,他们各自需要不同数量的积木来拼一些他们 ...
- 题目0171-相同数字的积木游戏1
相同数字的积木游戏1 题目描述 小华和小薇一起通过玩积木游戏学习数学. 他们有很多积木,每个积木块上都有一个数字, 积木块上的数字可能相同. 小华随机拿一些积木挨着排成一排,请小薇找到这排积木中数字相 ...
最新文章
- sqlsever无法重新启动计算机,安装SQL server 提示重新启动计算机失败怎么处理
- flink on yarn两种提交模式
- Eclipse4.2界面难看,启动速度,修改方法
- 日语学习-多邻国-人
- 辗转相除求最大公约数最小公倍数 扩展欧几里得算法
- 组合数学及其应用——polya计数
- 论文笔记之:Deep Reinforcement Learning with Double Q-learning
- Mysql启动报错:本地计算机上的mysql服务启动停止后,某些服务在未由其他服务或程序使用时将自动停止
- php 字符串操作函数
- Caused by: java.lang.ClassNotFoundException: backtype.storm.topology.IRichSpout
- 最新摸头GIF在线生成工具源码+实测可用
- 环评图件制作业务承接(生态影响评价)
- jQuery百家姓验证
- [从零学习汇编语言] - 计算机发展历史
- Python贝叶斯决策面计算及仿真
- Vue使用Element UI插件
- Python+AI智能编辑人脸
- Outlook客户端解析Html类型邮件样式问题
- 关于广告投放需要懂的几个关键词(DAU,DNU等等)
- 聚氯乙烯增韧改性研究新进展