不是VIP会员,不能显示答案

题目解答

题目:
1.(背包问题1)有一个质量上限为m的背包和n个物品。物品分三类,第一类物品有取的数量限制,第二类物品只能取一个,第三类物品可以无限取。

第i个物品的类别为tp[i](tp[i]∈[1,2,3])质量为w[i],价值为c[i],如果tp[i]=1 ,还会有一个a[0]表示这种物品最多只能取a[i]个。求这个背包可以装下的最大价值。

M≤1000,n ≤100,w[i],c[i]≤1000,a[i]<10,1≤tp[i]≤3。



试补全程序。



# include <iostream>

using namespace std;

int n, m, ans;

int f[100],a[101],tp[101],w[101],c[101];



int main() {

cin>>m>>n;

for(int i= 1; i<=n; ++i) {

cin>> tp[i]>> w[i]>> c[i];

if(tp[i] == 1) cin>> a[i];

}

f[0]= 0;

for (int i= 1; i<= m; ++i)

f[i]=___(1)___;

for(int i= 1; i<=n; ++i) {

if(tp[i]==1) {

for (int j= 1; j<= a[i]; ++j)

for(int v= m; v>=w[i]; --v)

f[v] = max(f[v], ___(5)___ );

}

else if(tp[i]== ___(2)___) {

for(int v=m; v>= ___(3)___ ; --v)

f[v]=max(f[v], ___(5)___ );

}

else {

for( ___(4)___ )

f[v]=max(f[v], ___(5)___ ) ;

}

}

printf("%d", f[m]);

return 0;

}




选择题

1) ⑴处应填( )。

2) ⑵处应填( )。

3) ⑶处应填( )。

4) ⑷处应填( )。

5) ⑸处应填( )。
考点:
分析:
解答:
评论:
老师: