要求底面严格小于它下方立方体的长宽,求出最高情况,一块石头可以多次使用

用结构体记录一块石头的三种放置情况,按面积排序。

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;
}

  

最新文章

  1. 1.2 - C#语言习惯 - 用运行时常量readonly而不是编译期常量const
  2. Block常用方法以及注意事项
  3. Downgrade PHP 7 to PHP 5.6 on Ubuntu 16.04
  4. [Machine Learning &amp; Algorithm] 随机森林(Random Forest)
  5. c++ c# java 调用 c++ 写的dll
  6. python之map、filter、reduce、lambda函数 转
  7. 人脸识别经典算法二:LBP方法
  8. [BIM]BIM中IDM介绍
  9. 抽象类(abstract)是否可以继承自实体类 ?
  10. BZOJ 4302 Buildings 解题报告
  11. HDOJ/HDU 2140 Michael Scofield&#39;s letter(字符转换~)
  12. compser 执行命令提示do not run composer as root/super !
  13. iOS中定时器NSTimer的使用-备用
  14. UILabel显示html文本
  15. websocket简介
  16. 安装mitmproxy
  17. shiro学习总结(一)----初识shiro
  18. 零碎知识点 telnet操作IMAP查看邮件
  19. 【bzoj1029】【JSOI2007】建筑抢修
  20. 修改ubuntu下网卡名不是eth0的问题

热门文章

  1. android 时间获取以及时间格式化
  2. openlayers调用瓦片地图分析
  3. R语言基础2
  4. django models的点查询/跨表查询/双下划线查询
  5. python识别验证码——PIL,pytesser,pytesseract的安装
  6. Linux--初次体验
  7. python pickle 模块的使用
  8. 快速搭建ssm框架
  9. ssl双向认证
  10. redis入门(04)redis的数据类型