(ssl 2291)分组背包#分组背包#

题意:有n件物品和一个容量为V的背包,第i件物品的费用是w[i],价值是c[i]。

这些物品被划分为若干组,每组中的物品互相冲突,最多选1件,求最大价值。

 
  • #include 
    using namespace std;
    int w[31],c[31],v,n,t,a[11][32],f[201];
    int main(){
    	scanf("%d%d%d",&v,&n,&t);
    	for (int i=1;i<=n;i++){
    		int p;
    		scanf("%d%d%d",&w[i],&c[i],&p);
    		a[p][++a[p][0]]=i; //第p组更新
  •         }
  • 	for (int k=1;k<=t;k++) //一共有t组
  • 	for (int j=v;j>=0;j--)
    	for (int i=1;i<=a[k][0];i++)
    	if (j>=w[a[k][i]]){
    		int tmp=a[k][i];
    		if (f[j]

     

你可能感兴趣的:(背包)