求助!不知道为什么WA了
查看原帖
求助!不知道为什么WA了
608251
zfznbnb楼主2022/12/24 11:09

代码如下

#include<bits/stdc++.h>
using namespace std;
const int inf=0x7fffffff;
int n,k;
int a[105],b[105];
int c[105];
int dp1[10005],dp2[10005];//dp1维护正的c,dp2维护负的c
int main(){
	scanf("%d %d",&n,&k);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	for(int i=1;i<=n;i++){
		scanf("%d",&b[i]);
	}
	for(int i=1;i<=1e4;i++){
		dp1[i]=dp2[i]=-inf;
	}//初始化
	dp1[0]=0;dp2[0]=0;//初始化边界
	for(int i=1;i<=n;i++){
		c[i]=a[i]-k*b[i];
		if(c[i]>=0){
			for(int j=1e4;j>=c[i];j--){
				dp1[j]=max(dp1[j],dp1[j-c[i]]+a[i]);
			}
		}//c[i]为正数(或0
		else{
			for(int j=1e4;j>=-c[i];j--){
				dp2[j]=max(dp2[j],dp2[j-(-1*c[i])]+a[i]);
			}
		}
	}//c[i]为负数 
	int ans=0;
	for(int i=0;i<=1e4;i++){
		if(dp1[i]==-inf||dp2[i]==-inf){
			continue;
		}
		else{
			ans=max(ans,dp1[i]+dp2[i]);
		}
	}//f[i]+g[i]保证c之和为0,统计答案最大值
	if(!ans)cout<<-1;
	else cout<<ans;
	return 0;
}

调了几遍感觉没有什么问题,但是WA了。。。

样例如下:

输入

3 2
10 8 1
2 7 1

正确输出

3 2
10 8 1
2 7 1

输入2

5 3
4 4 4 4 4
2 2 2 2 2

正确输出:

-1

求dalao们指点

2022/12/24 11:09
加载中...