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. hdu1010 - dfs,奇偶剪枝

    题目链接 给一个迷宫,问从起点到终点存不存在一条长度为T的路径. ------------------------------------------------------------------- ...

  2. ActiveMQ学习笔记(13)----Destination高级特性(一)

    1. Wildcards 1. Wildcards用来支持名字分层体系,它不是JMS规范的一部分,是ActiveMQ的扩展. ActiveMQ支持一下三种wildcards: 1. ".&q ...

  3. WordPress 增加 keywords 和 description

    WordPress 增加 keywords 和 description . <?php $keywords = '798资源网'; $description = '798资源网'; //文章页 ...

  4. HTML提交表单

    一.使用form提交表单 <form action="#" method="post"> {% csrf_token %} 班级<input ...

  5. Python的那些坑--------括号篇

    在Python中遇见了带不带括号的问题,我目前的是这三种,有问题请指出.如果有其他的,我后续会更新 一  函数带不带括号: def a(x): return x print(a) #不带括号调用的结果 ...

  6. (2016北京集训十)【xsy1528】azelso - 概率期望dp

    北京集训的题都是好题啊~~(于是我爆0了) 注意到一个重要的性质就是期望是线性的,也就是说每一段的期望步数可以直接加起来,那么dp求出每一段的期望就行了... 设$f_i$表示从$i$出发不回到$i$ ...

  7. xampp、phpstudy安装phalcon

    1.下载扩展 https://github.com/phalcon/cphalcon/releases/tag/v3.4.1选择PHP对应版本的phalcon扩展 2.PHP.ini 配置phalco ...

  8. 学习参考《Flask Web开发:基于Python的Web应用开发实战(第2版)》中文PDF+源代码

    在学习python Web开发时,我们会选择使用Django.flask等框架. 在学习flask时,推荐学习看看<Flask Web开发:基于Python的Web应用开发实战(第2版)> ...

  9. ztree实现根节点右击事件,显示添加删除

    需求,右击树节点,出现编辑和删除的提示框 1:在setting 配置里面,给callback设置,右击事件onRightClick: 2:写一个函数onRightClick function onRi ...

  10. GenIcam标准(一)

    1.概述 如今的数码摄相机包含了很多的功能,而不仅仅是采集图像.对于机器视觉相机来说,处理图像并把结果附加到图像数据流上,控制附加的硬件,代替应用程序作实时的处理等都是很平常的事情.这也导致了相机的编 ...