求调
查看原帖
求调
421758
HANDSOME_FZZ楼主2023/7/18 17:32
#include <bits/stdc++.h>
using namespace std;
const int N=105;
struct team{
	int a,b;
}q[N];
struct battle{
	int a,b;
}w[N];
int n,m,k,c,dp[N][N][N*20],maxx,ans;//前j场比赛看了i场,小红满意度为p时小明的最大满意度 
int main(){
	cin>>n>>m>>k>>c; int x,y;
	for(int i=1;i<=n;i++)cin>>q[i].a;//实力值 
	for(int i=1;i<=n;i++)cin>>q[i].b;//帅哥
	for(int i=1;i<=m;i++){
		cin>>x>>y;
		w[i].a=q[x].a*q[y].a;
		w[i].b=q[x].b+q[y].b;
		maxx+=w[i].b;
	}
	for(int i=1;i<=k;i++){
		for(int j=i;j<=m;j++){
			for(int p=0;p<=maxx;p++){
				dp[i][j][p]=dp[i][j-1][p];
				if(p>=w[i].b&&(dp[i-1][j-1][p-w[i].b]>0||p==w[i].b))
				dp[i][j][p]=max(dp[i][j][p],dp[i-1][j-1][p-w[i].b]+w[i].a);
				if(p>=c) ans=max(dp[i][j][p],ans);
			}
		}
	}
	if(ans>0) cout<<ans;
	else cout<<-1;
	return 0;
}
2023/7/18 17:32
加载中...