暴力背包样例没过求调,悬关
查看原帖
暴力背包样例没过求调,悬关
776582
jhdrgfj楼主2023/5/7 15:31

闰土

#include<bits/stdc++.h>
using namespace std;
struct y{
	int c[1005],p;
}y[105];
struct z{
	int k,p;
}z[1005];
int s,dp[6][6][6][6][6],n,cnt=1,a[10];
int qb(int a1,int a2,int a3,int a4,int a5){
	return a1*z[a[1]].p+a2*z[a[2]].p+a3*z[a[3]].p+a4*z[a[4]].p+a5*z[a[5]].p;
}
int main()
{
	cin>>s;
	for (int i=1;i<=s;i++){
		int x;
		cin>>x;
		for (int j=1;j<=x;j++){
			int c,k;
			cin>>c>>k;
			y[i].c[c]+=k;
		}
		int p;
		cin>>p;
		y[i].p=p;
	}
	int b;
	cin>>b;
	for (int i=1;i<=b;i++){
		int c,k,p;
		cin>>a[i]>>k>>p;
		z[a[i]].k=k;
		z[a[i]].p=p;
	}
	for (int i1=0;i1<=z[a[1]].k;i1++){
		for (int i2=0;i2<=z[a[2]].k;i2++){
			for (int i3=0;i3<=z[a[3]].k;i3++){
				for (int i4=0;i4<=z[a[4]].k;i4++){
					for (int i5=0;i5<=z[a[5]].k;i5++){
						dp[i1][i2][i3][i4][i5]=qb(i1,i2,i3,i4,i5);
						for (int j=1;j<=s;j++){
							dp[i1][i2][i3][i4][i5]=min(
								dp[i1][i2][i3][i4][i5],
								dp[i1-y[j].c[a[1]]][i2-y[j].c[a[2]]][i3-y[j].c[a[3]]][i4-y[j].c[a[4]]][i5-y[j].c[a[5]]]+
								qb(y[j].c[a[1]],y[j].c[a[2]],y[j].c[a[3]],y[j].c[a[4]],y[j].c[a[5]])-
								y[j].p
							);
						}
					}
				}
			}
		}
	}
	cout<<dp[z[a[1]].k][z[a[2]].k][z[a[3]].k][z[a[4]].k][z[a[5]].k];
}
2023/5/7 15:31
加载中...