SERCOI 近期设计了一种积木游戏。每一个游戏者有N块编号依次为1 ,2,…,N的长方体积木。

对于每块积木,它的三条不同的边分别称为”a边”、“b边”和”c边”。

游戏规则例如以下:

1. 从N块积木中选出若干块,并将它们分成M(l<=M<=N)堆,称为第1堆。第2
堆…。第M堆。

每堆至少有1块积木。而且第K堆中随意一块积木的编号要大于第K+1堆中随意一块积木的编号(2<=K<=M)。

2. 对于每一堆积木,游戏者要将它们垂直摞成一根柱子,并要求满足以下两个条件:

(a). 除最顶上的一块积木外。随意一块积木的上表面同且仅同还有一块积木的下表面接触,

而且要求以下的积木的上表面能包括上面的积木的下表面,

也就是说。要求以下的积木的上表面的两对边的长度分别大于等于上面的积木的两对边的长度。

(b). 对于随意两块上下表面相接触的积木,以下的积木的编号要小于上面的积木的编号。

最后。依据每人所摞成的M根柱子的高度之和来决出胜负。

请你编一程序,寻找一种摞积木的方案,使得你所摞成的M根柱子的高度之和最大。

思路:

顺序可略。多阶段决策

DP[col][used][top][face]代表在第 col 柱时。已经用了 used 个方块,第 col 上面是第 top 块的 face 面

1.当前木块放在第col上面。2.当前木块另起col。3.舍弃

#include <iostream>
#include <cstring>
using namespace std; struct Block{
int lens[3];
}; Block blocks[110];
int DP[110][110][110][3]; int M, N; int judge( int bellow, int f1, int up, int f2 ){ int bellow_a = blocks[bellow].lens[f1];
int bellow_b = blocks[bellow].lens[( f1 + 1 ) % 3];
int up_a = blocks[up].lens[f2];
int up_b = blocks[up].lens[( f2 + 1 ) % 3]; if( ( up_a <= bellow_a && up_b <= bellow_b ) ||
( up_a <= bellow_b && up_b <= bellow_a ) )
return blocks[up].lens[( f2 + 2 ) % 3]; return 0;
} int res_search( int col , int used, int top, int face ){ if( DP[col][used][top][face] )
return DP[col][used][top][face]; if( col == M && used == N )
return 0; if( col != M && used == N )
return -1; int res = 0; if( col ){
for( int f = 0; f <= 2; ++f ){ int ok = judge( top, face, used + 1, f ); if( ok )
res = max( res, res_search( col, used + 1, used + 1, f ) + ok ); }
} if( col < M ){
for( int f = 0; f <= 2; ++f ){
res = max( res, res_search( col + 1, used + 1, used + 1, f ) + blocks[used + 1].lens[( f + 2 ) % 3] );
}
} res = max( res, res_search( col, used + 1, top, face ) );
DP[col][used][top][face] = res; return res; } int main(){ while( cin >> N >> M ){ for( int i = 1; i <= N; ++i ){
cin >> blocks[i].lens[0] >> blocks[i].lens[1] >> blocks[i].lens[2];
} memset( DP, 0, sizeof( DP ) ); int res = res_search( 0, 0, 0, 0 ); cout << res << endl;
} return 0;
}

ecnu 1244的更多相关文章

  1. 【51Nod 1244】莫比乌斯函数之和

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 模板题... 杜教筛和基于质因子分解的筛法都写了一下模板. 杜教筛 ...

  2. 51nod 1244 莫比乌斯函数之和

    题目链接:51nod 1244 莫比乌斯函数之和 题解参考syh学长的博客:http://www.cnblogs.com/AOQNRMGYXLMV/p/4932537.html %%% 关于这一类求积 ...

  3. DP URAL 1244 Gentlemen

    题目传送门 /* 题意:已知丢失若干卡片后剩余的总体积,并知道原来所有卡片的各自的体积,问丢失的卡片的id DP递推:首先从丢失的卡片的总体积考虑,dp[i] 代表体积为i的方案数,从dp[0] = ...

  4. ural 1244. Gentlemen

    1244. Gentlemen Time limit: 0.5 secondMemory limit: 64 MB Let's remember one old joke: Once a gentle ...

  5. 51nod 1244 莫比乌斯函数之和(杜教筛)

    [题目链接] http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 [题目大意] 计算莫比乌斯函数的区段和 [题解] 利 ...

  6. ECNU 3260 - 袋鼠妈妈找孩子

    题目链接:http://acm.ecnu.edu.cn/problem/3260/ Time limit per test: 1.5 seconds Time limit all tests: 10. ...

  7. ECNU 3263 - 丽娃河的狼人传说

    一定要纪念一下第一道在比赛中自己做出来的贪心. 题目链接:http://acm.ecnu.edu.cn/problem/3263/ Time limit per test: 1.0 seconds T ...

  8. 【51nod-1239&1244】欧拉函数之和&莫比乌斯函数之和 杜教筛

    题目链接: 1239:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1239 1244:http://www.51nod. ...

  9. LightOJ 1244 - Tiles 猜递推+矩阵快速幂

    http://www.lightoj.com/volume_showproblem.php?problem=1244 题意:给出六种积木,不能旋转,翻转,问填充2XN的格子有几种方法.\(N < ...

随机推荐

  1. HDU 1171 Big Event in HDU【01背包】

    题意:给出n个物品的价值和数目,将这一堆物品分给A,B,问怎样分使得两者的价值最接近,且A的要多于B 第一次做的时候,没有思路---@_@ 因为需要A,B两者最后的价值尽可能接近,那么就可以将背包的容 ...

  2. ZBrush功能特性之变形

    使用ZBrush内置的变形功能可以让用户对三维网格轻松应用扭曲.拉伸.弯曲及其他各种变化.在ZBrush当中,有超过20种的强大变形类型,可以应用于任何轴向.用户只需单击几次即可创造出高级形状,如图所 ...

  3. 向ueditor中插入内容

    html在ueditor中插入内容不能直接插入,必须判断编辑器是否创建成功,jsp可以用java代码嵌套的方式. html页面中:<textarea id="zym" nam ...

  4. ajax错误信息

    XMLHttpRequest.status状态码 1xx-信息提示 这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个1xx响应. 100-继续. 101-切换协议. 2xx- ...

  5. Python 线程高级篇 threading 模块的使用

    创建一个tread实例,给他传一个函数 #!/usr/bin/python import threading from time import * loops =[4,2] def loop (nlo ...

  6. Cause of 400 Bad Request Errors

    The 400 Bad Request error displays inside the Internet browser window, just as web pages do. Cause o ...

  7. linux 系统相关命令

    说明:此篇以 Debian ( ubuntu16.04 ) 命令为例 1. tab键默认是不能自动补全命令 apt install bash-completion // 安装完成之后重启系统 2. 虚 ...

  8. CI框架源代码阅读笔记2 一切的入口 index.php

    上一节(CI框架源代码阅读笔记1 - 环境准备.基本术语和框架流程)中,我们提到了CI框架的基本流程.这里再次贴出流程图.以备參考: 作为CI框架的入口文件.源代码阅读,自然由此開始. 在源代码阅读的 ...

  9. 基于Masonry自己主动计算cell的高度

    /** * This is a very very helpful category for NSTimer. * * @author huangyibiao * @email huangyibiao ...

  10. mysql-组合查询

    一.组合查询 mysql允许执行多个查询(多条select语句),并将结果作为单个查询结果集返回.这些组合查询通常称为并(union)或复合查询(compound query). 有两种情况需要使用组 ...