Uva 437 巴比伦塔 && UVA10003
要求底面严格小于它下方立方体的长宽,求出最高情况,一块石头可以多次使用
用结构体记录一块石头的三种放置情况,按面积排序。
dp[i] = max(dp[i],dp[j] + block[i].hight); 当选择到i时,与前几个比较,找出当前情况下的高度最高可能
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std; struct node
{
int x;
int y;
int hight;
}block[100];
int dp[100];
bool cmp(node a,node b)
{
return a.x*a.y < b.x*b.y;
} int main()
{
int n,a,b,c,cas = 1;
while(scanf("%d",&n) && n)
{
int tmp = 1;
for(int i = 0;i < n;i++)
{
scanf("%d%d%d",&a,&b,&c);
block[tmp].x = a;
block[tmp].y = b;
block[tmp++].hight = c;
block[tmp].x = c;
block[tmp].y = a;
block[tmp++].hight = b;
block[tmp].x = b;
block[tmp].y = c;
block[tmp++].hight = a;
}
sort(block+1,block+tmp,cmp);
memset(dp,0,sizeof(dp));
for(int i = 1;i < tmp;i++)
{
dp[i] = block[i].hight;
for(int j = 1;j < i;j++)
{
if(((block[i].x>block[j].x)&&(block[i].y>block[j].y))||((block[i].x>block[j].y)&&(block[i].y>block[j].x)))
dp[i] = max(dp[i],dp[j] + block[i].hight);
}
}
int maxn=0;
for(int i = 1;i < tmp;i++)
if(dp[i] > maxn)
maxn = dp[i];
printf("Case %d: maximum height = %d\n",cas++,maxn);
}
return 0;
}</span> 有一根长10公尺的木棍必须在第2、4、7公尺的地方切割。这个时候就有几种选择了。你可以选择先切2公尺的地方,然后切4公尺的地方,最后切7公尺的地方。这样的选择其成本为:10+8+6=24。因为第一次切时木棍长10公尺,第二次切时木棍长8公尺,第三次切时木棍长6公尺。但是如果你选择先切4公尺的地方,然后切2公尺的地方,最后切7公尺的地方,其成本为:10+4+6=20,这成本就是一个较好的选择。
你的老板相信你的电脑能力一定可以找出切割一木棍所需最小的成本。
p[j] - p[i]代表第一刀的费用,切完后吧它变成i~k 和 k~j 两个部分
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAX 0x3f3f3f3f using namespace std; int len;
int d[50][50];
int p[51]; int main()
{
int n;
while(scanf("%d",&n) && n)
{
int m;
scanf("%d",&m);
for(int i=1; i <= m; i++)
scanf("%d",&p[i]);
p[0] = 0,p[m+1] = n;
memset(d,0,sizeof(d)); for(int l = 2; l <= m+1; l++)
for(int i = 0; i + l <= m+1; i++)
{
int j = i + l;
d[i][j] = MAX;
for(int k = i+1; k < j; k++)
{
d[i][j] = min(d[i][j],d[i][k]+d[k][j]+p[j]-p[i]);
}
}
printf("The minimum cutting is ");
printf("%d.\n",d[0][m+1]);
}
return 0;
}
Uva 437 巴比伦塔 && UVA10003的更多相关文章
- uva 437 巴比伦塔(DAG上dp)
巴比伦塔 紫书P269 看完紫书,终于可以自己写一个dp了 :) [题目链接]巴比伦塔 [题目类型]DAG上dp &题意: 有n种立方体 n<=30,每种有无穷个,要求选一些立方体摞成一 ...
- UVa 437 巴比伦塔
https://vjudge.net/problem/UVA-437 这道题和HDU的Monkey and Banana完全一样. #include<iostream> #include& ...
- UVA 437 巴比伦塔 【DAG上DP/LIS变形】
[链接]:https://cn.vjudge.net/problem/UVA-437 [题意]:给你n个立方体,让你以长宽为底,一个个搭起来(下面的立方体的长和宽必须大于上面的长和宽)求能得到的最长高 ...
- UVA 437 十九 The Tower of Babylon
The Tower of Babylon Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Subm ...
- uva 437,巴比伦塔
题目链接:https://uva.onlinejudge.org/external/4/437.pdf 题意:巴比伦塔: 给出n种立方体,一个立方体能放到另一个立方体上,必须满足,底面一定要小于下面的 ...
- UVA 437 The Tower of Babylon巴比伦塔
题意:有n(n≤30)种立方体,每种有无穷多个.要求选一些立方体摞成一根尽量高的柱子(可以自行选择哪一条边作为高),使得每个立方体的底面长宽分别严格小于它下方立方体的底面长宽. 评测地址:http:/ ...
- 【UVA 437】The Tower of Babylon(记忆化搜索写法)
[题目链接]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- UVa 437 The Tower of Babylon(经典动态规划)
传送门 Description Perhaps you have heard of the legend of the Tower of Babylon. Nowadays many details ...
- UVa 437 The Tower of Babylon
Description Perhaps you have heard of the legend of the Tower of Babylon. Nowadays many details of ...
随机推荐
- NO.7 项目需求分析
NO.7 项目需求分析 由于我们组的第一次选题并没有通过,所以我们又重新选择了一个题目--高校学生征信系统. 结合老师的作业要求,我们对该项目进行了详细的需求分析,软件需求规格说明书地址请点击这里.软 ...
- centos7 下通过nginx+uwsgi部署django应用
1. 安装python3.6 1. 获取 wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz tar -xzvf Python- ...
- python的PEP8 代码风格指南
PEP8 代码风格指南 这篇文章原文实际上来自于这里:https://www.python.org/dev/peps/pep-0008/ 知识点 代码排版 字符串引号 表达式和语句中的空格 注释 版本 ...
- 逆向集录_00_不同程序OEP特征总结
在分析/逆向 程序时,如果事先知道这类程序的一些特征,那将会是事半功倍的: 分析/逆向 程序,和写程序不同,比喻的话:写程序像在作案,分析/逆向 程序就像是在破案,对破案来讲,重在假想和推理: 特征1 ...
- c# 几种深拷贝方式的比较
public static class Tools { //利用 BinaryFormatter 实现深拷贝 public static T DeepCopyByBinary<T>(thi ...
- vue-cli项目中,全局引入jquery
命令行执行 npm install --save jquery 找到webpack.base.conf.js文件,写入代码: const webpack = require('webpack') 在m ...
- 19届华为实习生笔试之判断iPv6地址类型
题二: 答案: #coding=utf-8 import re,sys str = sys.stdin.readline().strip() def regex(str): result = &quo ...
- Celery 分布式任务队列快速入门
Celery 分布式任务队列快速入门 本节内容 Celery介绍和基本使用 在项目中如何使用celery 启用多个workers Celery 定时任务 与django结合 通过django配置cel ...
- SpringBoot(五):@ConfigurationProperties配置参数绑定
在springmvc或其他ssh框架中如果我们要实现一个配置参数的加载,需要使用代码实现读取properties文件等操作,或者需要使用其他属性@value(name="username&q ...
- MyBatis(一):配置并使用
MyBatis具体是什么东东,这些在后边在研究吧,本文目的是为了记录如何使用MyBatis. 首先,需要下载MyBatis开发所需要文件. 通过github上可以找到MyBatis代码:https:/ ...