描述

积木游戏

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.对于每一堆积木,游戏者要将它们垂直摞成一根柱子,并要求满足下面两个条件:
(1)除最顶上的一块积木外,任意一块积木的上表面同且仅同另一块积木的下表面接触,并且要求下面的积木的上表面能包含上面的积木的下表面,也就是说,要求下面的积木的上表面的两对边的长度分别大于等于上面的积木的两对边的长度。

(2)对于任意两块上下表面相接触的积木,下面的积木的编号要小于上面的积木的编号。

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

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

格式

输入格式

第一行有两个正整数N和M(1<=M<=N<=100),分别表
示积木总数和要求摞成的柱子数。这两个数之间用一个空格符隔开。接下来N行依次是编号
从1到N的N个积木的尺寸,每行有三个;至1000之间的整数,分别表示该积木a边,b边
和c边的长度。同一行相邻两个数之间用一个空格符隔开。

输出格式

只有一行,为一个整数,表示M根柱子的高度之和。

样例1

样例输入1[复制]

4 2
10 5 5
8 7 7
2 2 2
6 6 6

样例输出1[复制]

24

限制

各个测试点1s

题意:中文题。

思路:可以看出就是个背包,主要是如何考虑状态,高度和底面大小的关系,其实我们可以将某块积木的某边的高作为状态,因为积木是按照顺序选取的,所以dp[i][j][k]代表第i柱时,选取第j块积木,并以它的第k条边作为高。这样我们每一柱都当做LIS来做,同时将上一个值转移过来,所以可以用滚动数组优化空间。

/** @Date    : 2016-12-03-22.23* @Author  : Lweleth (SoungEarlf@gmail.com)* @Link    : https://github.com/* @Version :*/#include<bits/stdc++.h>
#define LL long long
#define PII pair<int ,int>
#define MP(x, y) make_pair((x),(y))
#define fi first
#define se second
#define PB(x) push_back((x))
#define MMG(x) memset((x), -1,sizeof(x))
#define MMF(x) memset((x),0,sizeof(x))
#define MMI(x) memset((x), INF, sizeof(x))
using namespace std;const int INF = 0x3f3f3f3f;
const int N = 1e5+20;
const double eps = 1e-8;int dp[110][110][3];//第i根 第j个 第k边为高 的最大值
int a[110][3];
int main()
{int n, m;cin >> n >> m;for(int i = 1; i <= n; i++)for(int j = 0; j < 3; j++)scanf("%d", &a[i][j]);MMF(dp);int ma1, ma2, mi1, mi2;int ans = 0;int sum = 0;for(int i = 1; i <= m; i++){for(int j = 1; j <= n; j++){for(int k = 0; k < j; k++)//从0开始{for(int l = 0; l < 3; l++){int l1 = (l + 2) % 3;int r1 = (l + 1) % 3;for(int o = 0; o < 3; o++){  int l2 = (o + 2) % 3;int r2 = (o + 1) % 3;ma1 = a[j][l1];mi1 = a[j][r1];ma2 = a[k][l2];mi2 = a[k][r2];if(ma1 < mi1)swap(ma1, mi1);if(ma2 < mi2)swap(ma2, mi2);//cout << ma1 << mi1 << " " << ma2 << mi2 << endl;if(ma2 >= ma1 && mi2 >= mi1)dp[i][j][l] = max(dp[i][j][l], dp[i][k][o] + a[j][l]);dp[i][j][l] = max(dp[i][j][l], dp[i-1][k][o] + a[j][l]);ans = max(ans, dp[i][j][l]);}}}}}printf("%d\n", ans);return 0;
}

转载于:https://www.cnblogs.com/Yumesenya/p/6151895.html

vijos 1464 积木游戏 DP相关推荐

  1. [NOI 1997] 积木游戏(dp)

    ·题目描述 一种积木游戏,游戏者有N块编号依次为1,2,-,N的长方体积木.第I块积木通过同一顶点三条边的长度分别为ai,bi,ci(i=1,2,-,N),如图1所示: 游戏规则如下: 1 从N块积木 ...

  2. #bzoj2240#积木游戏(DP? 贪心?)

    2240: 积木游戏 时间限制: 1 Sec  内存限制: 128 MB 题目描述 小时候我们都喜欢玩积木.这里的积木都是单位边长的正方体块,多个积木可以堆成一个"高木",&quo ...

  3. c语言幼儿园积木游戏,幼儿园《积木游戏》课件【三篇】

    [导语]课件制作本身就是作者综合素养的一种体现,它显现出制作者对教育.教学.教材改革方向的把握,对课堂教学的理解,对现代教育技术的领悟.因此教师在设计课件时一定要吃透教学内容,设计出符合教学的方案用于 ...

  4. 计算机积木游戏,乐高积木模拟器

    乐高积木模拟器是一款非常好玩的休闲小游戏,超好玩的拼积木游戏玩法,玩家需要将一个个积分方块拼接在一起,看似简单的玩法实则充满着挑战性,非常考验玩家的耐心.充分发挥自己的想象力,在这个游戏世界中玩耍,加 ...

  5. Vijos P1975 扫雷游戏【谜题】

    描述 扫雷游戏是一款十分经典的单击小游戏. 在n行m列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格). 玩家翻开一个非地雷格时,该格将会出现一个数字--提示周围格子中有 ...

  6. 积木游戏 (Standard IO)

    题意/Description: 在一个N*N的区域玩积木游戏,每个单元格正好跟积木的底面相等,每个单元格里放有若干个积木,Alice想重新摆放积木,使得每个单元格最多只能放一个积木,并且所有积木正好形 ...

  7. 华为机试真题 Python 实现【相同数字的积木游戏】【2022.11 Q4 新题】

    目录 题目 思路 考点 Code 题目 题目描述 小华和小薇一起通过玩积木游戏学习数学. 他们有很多积木,每个积木块上都有一个数字,积木块上的数字可能相同. 小华随机拿一些积木挨着排成一排,请小薇找到 ...

  8. 算法提高 盾神与积木游戏

    算法提高 盾神与积木游戏   时间限制:1.0s   内存限制:256.0MB 问题描述 最近的m天盾神都去幼儿园陪小朋友们玩去了~ 每个小朋友都拿到了一些积木,他们各自需要不同数量的积木来拼一些他们 ...

  9. 题目0171-相同数字的积木游戏1

    相同数字的积木游戏1 题目描述 小华和小薇一起通过玩积木游戏学习数学. 他们有很多积木,每个积木块上都有一个数字, 积木块上的数字可能相同. 小华随机拿一些积木挨着排成一排,请小薇找到这排积木中数字相 ...

最新文章

  1. Swift互用性:采用Cocoa设计模式(Swift 2.0版)-b
  2. 网络工程师常用英文简写
  3. MongoDB 小试牛刀
  4. Minimal API Todo Sample
  5. 【C++基础】STL迭代器
  6. java开发过程中的命名规范
  7. 你还认为中国没有桌面虚拟化核心技术?
  8. java代码性能优化
  9. 作为游戏策划,软件记录
  10. 计算机学机械制图吗,机械制图为什么这么难学?
  11. 如何进行软件技术管理?
  12. 微信渐变国旗头像来了!一键生成
  13. 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链...
  14. python中文开发环境_python中文开发环境
  15. postgres用户管理及权限控制--赋予某账号只读权限
  16. 学习经验分享之四:YOLOv7学习心得
  17. 采用DotAsterisk(点星PBX)系统组建跨地区总公司和分公司之间的免费VoIP电话呼叫
  18. JS如何实现多线程?
  19. 对当下很火的两大短视频平台 抖音 和 微视进行竞品分析
  20. 计算机毕业设计之Android的游戏账号交易平台APP(源码+系统+mysql数据库+Lw文档)

热门文章

  1. 1087 有多少不同的值 (20分)
  2. win7+GPU运行py-faster-rcnn
  3. opencv 图片叠加_基于OpenCV的红绿灯识别代码解析
  4. js等待5秒后执行_厦门同安首台智能垃圾分类回收柜机投用 扫二维码5秒后回收变现...
  5. 分享|涨薪必备的Python接口自动化测试资源技能一键get
  6. kaggle实战笔记_1.数据处理
  7. NFT交易平台Mintable首个提案通过 收入将按比例分配给MINT代币持有者
  8. SAP License:第三只眼看财务-现金流量表编制
  9. 手把手系列|实操市场风险Var
  10. 风控报表大全(全面触及)