题目
分析
显然可设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 }