其他分享
首页 > 其他分享> > [jzoj 1286] 太空电梯 {判定性dp}

[jzoj 1286] 太空电梯 {判定性dp}

作者:互联网

题目

Description
  奶牛们想用K(1<=K<=400)中石块制造一个太空电梯去太空旅行,每种石块有自己的高度h_i(1<=h_i<=100)和数量c_i(1<=c_i<=10),为了避免宇宙射线的干扰,每种石块不能超过最高可以达到的高度a_i(1<=a_i<=40000)。
  帮助奶牛用石块堆积一个最高的太空电梯。

Input
  第1行:一个整数K
  第2到K+1行:每行3个用空格隔开的整数h_i,a_i,c_i

Output
  输出一个高度H,表示最大高度。


解题思路

h f[i][j]ij先将石块按h排序。 \\ \ \\ 设f[i][j]表示前i种石块高度为j时是否可行。先将石块按h排序。 设f[i][j]表示前i种石块高度为j时是否可行。

believe{\color{Red}believe 大家都已经会了吧。}believe大家都已经会了吧。


代码

#include<cstdio>
#include<algorithm>
#define rep(i,x,y) for (register int i=x;i<=y;i++)
#define dep(i,x,y) for (register int i=x;i>=y;i--)
using namespace std;
struct node{int x,y,z;}a[501];
int n; bool f[40005]={1}; 
bool cmp(node x,node y){return x.y<y.y;}
int main(){
	scanf("%d",&n); 
	rep(i,1,n) scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z); 
	sort(a+1,a+n+1,cmp); 
	rep(i,1,n) rep(j,1,a[i].z) dep(k,a[i].y-a[i].x,0) if (f[k]) f[k+a[i].x]=1; 
	dep(i,a[n].y,0) if (f[i]) return 0&printf("%d",i); 
}

标签:node,1286,jzoj,int,高度,石块,排序,believe,dp
来源: https://blog.csdn.net/qq_39897867/article/details/88600261