动态规划(完全背包的变形)
来源:互联网 发布:方便面怎么煮好吃知乎 编辑:程序博客网 时间:2024/05/16 05:02
poj2392
Description
Help the cows build the tallest space elevator possible by stacking blocks on top of each other according to the rules.
Input
* Lines 2..K+1: Each line contains three space-separated integers: h_i, a_i, and c_i. Line i+1 describes block type i.
Output
Sample Input
37 40 35 23 82 52 6
Sample Output
48
Hint
From the bottom: 3 blocks of type 2, below 3 of type 1, below 6 of type 3. Stacking 4 blocks of type 2 and 3 of type 1 is not legal, since the top of the last type 1 block would exceed height 40.
Source
#include<stdio.h>
#include<math.h>
#define N 40005
typedef struct
{
int h,mh,n;
}Block;
Block block[405];
int dp[N];
void qsort(int l,int r)
{
int i,j;
Block x;
if(l<r)
{
i=l;
j=r;
x=block[l];
while(i<j)
{
while(i<j&&block[j].mh>=x.mh)
j--;
if(i<j)
block[i++]=block[j];
while(i<j&&block[i].mh<x.mh)
i++;
if(i<j)
block[j--]=block[i];
}
block[i]=x;
qsort(l,i-1);
qsort(i+1,r);
}
return ;
}
int main(void)
{
int i,j,count,n,use[N],ans=0;
while(~scanf("%d",&n))
{
ans=0;
memset(dp,0,sizeof(dp));
for(i=0;i<n;i++)
scanf("%d%d%d",&block[i].h,&block[i].mh,&block[i].n);
qsort(0,n-1);
for(i=0;i<n;i++)
{
memset(use,0,sizeof(use));
for(j=0;j<=block[i].mh;j++)
{
if(j<block[i].h||dp[j]>=dp[j-block[i].h]+block[i].h)
dp[j]=dp[j];
else
{
if(use[j-block[i].h]<block[i].n)
{
dp[j]=dp[j-block[i].h]+block[i].h;
use[j]=use[j-block[i].h]+1;
}
}
if(dp[j]>ans)
ans=dp[j];
}
}
printf("%d\n",ans);
}
}
- 动态规划(完全背包的变形)
- HDU 1114 Piggy-Bank(完全背包动态规划+变形)
- 完全背包(动态规划)
- 完全背包(动态规划)
- 动态规划-----完全背包
- 完全背包---动态规划
- 【动态规划】完全背包
- nyoj--311--完全背包(动态规划,完全背包)
- 动态规划总结(01背包 完全背包 多重背包)
- 动态规划初步( 01 背包、完全背包、多重背包)
- 动态规划背包算法(01背包和完全背包)
- 动态规划-完全背包(1)
- 动态规划-完全背包(2)
- hiho 完全背包(动态规划)
- nyoj311 完全背包(动态规划)
- Piggy-Bank (完全背包 动态规划)
- hdu 1574 RP问题 动态规划,01背包的变形
- 最大报销额(动态规划:01背包问题变形)
- Web基础之CSS3
- 268. Missing Number
- Hexo 博客空间
- 198. House Robber&&213. House Robber II
- Linux与Unix的关系
- 动态规划(完全背包的变形)
- 测试面试题
- [Debug之路]Linux+C遇到的问题记录
- webstorm2.3 for Mac下载及最新破解方式-----2017/02/25(更新)
- HDU 6016
- 多进程
- 介绍MathJax如何使用LaTeX语法编写数学公式
- day 007
- php项目开发