hdoj1069 Monkey and Banana(DP)
来源:互联网 发布:贝恩杯 知乎 编辑:程序博客网 时间:2024/06/05 06:51
dp[i]代表第i块砖头为顶层时的最大高度。
dp[i]=max{dp[j]+b[i].z,dp[i]}。
因为一类砖头可以拿任意块,所以一类砖头最多可以有3种高度。
最后目的是找到一个单挑递减的序列使得累起来的高度之和最大。
代码如下:
#include<stdio.h>#include<math.h> #include<string> #include<algorithm>using namespace std;struct block{int x,y,z;};bool cmp(const block a,const block b){if(a.x==b.x)return a.y>b.y;else return a.x>b.x;}int max1(int a,int b){return (a>b)?a:b;}block b[555];int dp[555];int main(){int n,i,k,j,x,y,z,max,t=1;while(~scanf("%d",&n)&&n){k=0;max=-1;for(i=0;i<n;i++){scanf("%d%d%d",&x,&y,&z);b[k].x=max1(x,y);b[k].y=min(x,y);b[k].z=z;k++;b[k].x=max1(x,z);b[k].y=min(x,z);b[k].z=y;k++;b[k].x=max1(z,y);b[k].y=min(z,y);b[k].z=x;k++;}sort(b,b+k,cmp);for(i=0;i<k;i++){dp[i]=b[i].z;for(j=0;j<i;j++)if(b[j].x>b[i].x&&b[j].y>b[i].y)if(dp[j]+b[i].z>dp[i])dp[i]=dp[j]+b[i].z;if(max<dp[i])max=dp[i];}printf("Case %d: maximum height = %d\n",t++,max);}return 0;}
阅读全文
0 0
- hdoj1069 Monkey and Banana (dp)
- HDOJ1069-Monkey and Banana(DP)
- HDOJ1069 Monkey and Banana【dp】
- hdoj1069 Monkey and Banana(DP)
- HDOJ1069 Monkey and Banana(DP,LIS)
- <hdoj1069>Monkey and Banana
- Monkey and Banana dp
- Monkey and Banana(dp)
- HDU1069(Monkey and Banana)DP
- HDU1069 Monkey and Banana 【DP】
- hdu1069 Monkey and Banana--DP
- Monkey and Banana(DP)
- HDU1069-Monkey and Banana(dp)
- hdu1069 Monkey and Banana dp
- zoj 1093 dp Monkey and Banana
- ZOJ 1093 Monkey and Banana (DP)
- ZOJ 1093 Monkey and Banana【DP】
- hdu1069 Monkey and Banana 还是DP
- ip正则表达式验证
- 什么是Code Review
- idea 基于maven 的ssm 整合实现登录功能(第一篇)
- 基于百度地图Web API的物联设备调试工具(一)
- web前端接触到的功能及页面
- hdoj1069 Monkey and Banana(DP)
- synchronization 的 monitors 监控者
- Nginx内置gzip配置详解
- spring定时器
- 移动应用/APP的测试流程及方法
- simulink回调函数
- Maven私有库和本地库的安装与配置 Sonatype Nexus + Maven
- FFMPEG H264/H265 编码延迟问题
- 【java面试】算法篇