[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]表示前i种石块高度为j时是否可行。
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