背景

1997年全国青少年信息学(计算机)奥林匹克竞赛试题

第二试

描述

积木游戏

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

提示

1997年全国青少年信息学(计算机)奥林匹克竞赛试题

第二试

大概就是个比较简单的dp,f[i][a][b][k],表示考虑到第i堆,第a个积木,上一个放的是b,且b的k面朝上。

然后转移的话是三种状态,丢掉,f[i][a+1][b][k],放到i堆顶上f[i][a+1][a][k'](这里要枚举个k’),

以及重新放到其它堆上f[i+1][a+1][a][k'](同样要枚举个k)。

 #include <iostream>
#include <cstring>
#include <cstdio>
const int N = + ;
using namespace std ;
int n,m,f[N][N][N][],ans,inf;
struct Building
{
int h[],x[],y[];
} bks[N]; void Init()
{
scanf("%d%d",&n,&m);
int x,y,h;
for(int i = ;i <= n; ++i)
{
scanf("%d%d%d",&x,&y,&h);
bks[i].h[] = h;
bks[i].x[] = max(x,y), bks[i].y[] = min(x,y);
bks[i].h[] = x;
bks[i].x[] = max(h,y), bks[i].y[] = min(h,y);
bks[i].h[] = y;
bks[i].x[] = max(x,h), bks[i].y[] = min(x,h);
}
} int dp(int i,int a,int b,int k)
{
if(i>m||a>n)return ;
if(~f[i][a][b][k]) return f[i][a][b][k];
int ret = f[i][a][b][k] = ;
ret = dp(i,a+,b,k);//throw
for(int k2 = ; k2 < ; ++k2)
{
if(bks[b].x[k]>=bks[a].x[k2]&&bks[b].y[k]>=bks[a].y[k2])
ret = max(ret,dp(i,a+,a,k2)+bks[a].h[k2]);//top
if(i+<=m)
ret = max(ret,dp(i+,a+,a,k2)+bks[a].h[k2]);//new
}
f[i][a][b][k] = ret ;
return f[i][a][b][k] = ret;
} void Solve()
{
memset(f,-,sizeof(f));//inf = f[1][1][1][1];
bks[].x[] = bks[].y[] = ;
bks[].x[] = bks[].y[] = ;
bks[].x[] = bks[].y[] = ;
int ans = dp(,,,);
printf("%d\n",ans); } int main( )
{
// freopen("buildinggame.in","r",stdin);
// freopen("buildinggame.out","w",stdout);
Init();
Solve();
fclose(stdin);
fclose(stdout);
return ;
}

vijos 1464 NOIP 1997 积木游戏的更多相关文章

  1. vijos 1464 积木游戏 DP

    描述 积木游戏 SERCOI 最近设计了一种积木游戏.每个游戏者有N块编号依次为1 ,2,…,N的长方体积木.对于每块积木,它的三条不同的边分别称为"a边"."b边&qu ...

  2. 动态规划(水题):COGS 261. [NOI1997] 积木游戏

    261. [NOI1997] 积木游戏 ★★   输入文件:buildinggame.in   输出文件:buildinggame.out   简单对比时间限制:1 s   内存限制:128 MB S ...

  3. [NOI1997] 积木游戏

    COGS 261. [NOI1997] 积木游戏 http://www.cogs.pro/cogs/problem/problem.php?pid=261 ★★   输入文件:buildinggame ...

  4. [NOI1997] 积木游戏(dp)

    COGS 261. [NOI1997] 积木游戏 http://www.cogs.pro/cogs/problem/problem.php?pid=261 ★★   输入文件:buildinggame ...

  5. NOI 97 (Vijos 1464)积木游戏(DP)

    很普通的DP,设dp[i][j][k]为第i块积木放在第j堆且摆放状态为k的最高高度.方程很容易推出. # include <cstdio> # include <cstring&g ...

  6. 【NOIP 2012 国王游戏】 贪心+高精度

    题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍 ...

  7. NOIp 2011 mayan游戏 搜索

    题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...

  8. [NOIp 2011]Mayan游戏

    Description Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏 ...

  9. [NOIp 2012]国王游戏

    Description 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国 ...

随机推荐

  1. vs2013下使用Assist X的破解方法

    Assist X的破解下载:http://pan.baidu.com/s/1kTnDH23 密码:j9jp 01.安装,点击VA_X_Setup2042.exe 安装 02.破解 找到这样的目录:C: ...

  2. c++中的static关键字

    1.在函数体中,一个被声明为静态的变量在这一函数被调用的过程中维持其值不变. 2.在模块内(但在函数外),比如在某一个C源文件内,一个被声明为静态的变量可以被该模块内的所有函数调用,但不能被模块外的函 ...

  3. hdu 3481 3482

    Good Serial Inc.比较简单: #include<cstdio> #include<cstring> #include<algorithm> #defi ...

  4. Firefly官方教程之DBentrust使用文档

    原地址: http://bbs.gameres.com/thread_224185.html 1.dbentrust说明该模块主要是对数据库与memcached存储的处理.里面封装了从memcache ...

  5. POJ - 1523 SPF

    题目要求割顶集,并且还要求出去掉割顶之后剩下的图连通数目. tarjan算法求出割顶后直接枚举就可以了吧. 一开始想到利用iscut[u]的次数也就是点u被判定为割顶的次数求连通分量数,还有利用与结点 ...

  6. UC何小鹏:移动互联网创业需警惕五大“不靠谱

    http://tech.qq.com/a/20140121/012443.htm 腾讯科技 启言 1月21日报道 移动互联网创业很容易犯错误,一不小心就陷入“坑”中.UC也是如此.近日,UC创始人何小 ...

  7. Visual Studio中的项目属性-->生成-->配置

    1.Debug配置 2.Release配置 2.Debug和Release的区别 (1)Debug有定义DEBUG常量,Release没有 (2)Debug没有优化代码,Release有 (3)生成路 ...

  8. Error building results for action sayHello in namespace /inteceptor -

    原因:不知道如何编译此 struts.xml ,解决方法:导入struts-default文件: <package name="test"  namespace=" ...

  9. WordPress Kernel Theme ‘upload-handler.php’任意文件上传漏洞

    漏洞名称: WordPress Kernel Theme ‘upload-handler.php’任意文件上传漏洞 CNNVD编号: CNNVD-201311-127 发布时间: 2013-11-12 ...

  10. struts1.3异常处理机制

    当Struts的控制器捕获到异常时,在异常处理块中,创建描述异常信息的ActionMessage对象,并放入ActionMessages对象中.然后把ActionMessages对象存放到一定范围内( ...