题目传送门
解题思路:
一道题目描述特别繁琐的01背包
AC代码:
1 #include<iostream> 2 #include<cstdio> 3 4 using namespace std; 5 6 int v1,v2,ti,m,n,w[5001],_time,f[5002]; 7 struct kkk{ 8 int id,v; 9 }e[5001]; 10 11 int main() { 12 scanf("%d%d",&v1,&v2); 13 ti = v2 / v1; 14 scanf("%d%d",&m,&n); 15 for(int i = 1;i <= n; i++) { 16 scanf("%d",&w[i]); 17 w[i] *= ti; 18 } 19 for(int i = 1;i <= m; i++) 20 scanf("%d%d",&e[i].id,&e[i].v); 21 scanf("%d",&_time); 22 for(int i = 1;i <= m; i++) 23 for(int j = _time;j >= w[e[i].id]; j--) 24 f[j] = max(f[j],f[j-w[e[i].id]] + e[i].v); 25 printf("%d",f[_time]); 26 return 0; 27 }