JZOJ 1286. 太空电梯
题目
分析
显然可设f[i]f[i] 表示是否可以到达高度i
每次枚举高度,看当前的点是否可以到达这个高度就可以了
f[0] = 1
代码
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 struct sb 5 { 6 int val,he,c; 7 }a[1000010]; 8 int f[1000010]; 9 bool cmp(sb a,sb b){return a.he<b.he; } 10 int main () 11 { 12 int n; 13 cin>>n; 14 for (int i=1;i<=n;i++) 15 cin>>a[i].val>>a[i].he>>a[i].c; 16 sort(a+1,a+1+n,cmp); 17 f[0]=1; 18 for (int i=1;i<=n;i++) 19 for (int k=a[i].he;k>=0;k--) 20 for (int j=1;j<=a[i].c&&k+a[i].val*j<=a[i].he&&f[k]==1;j++) 21 f[k+j*a[i].val]=1; 22 for (int i=a[n].he;i>=1;i--) 23 { 24 if (f[i]) { 25 cout<<i; 26 return 0; 27 } 28 } 29 cout<<0; 30 }
为何要逼自己长大,去闯不该闯的荒唐