91分求助(#10 WA)
查看原帖
91分求助(#10 WA)
678625
shicj楼主2023/8/18 15:12

考虑了正负,还是WA了

我输出了350(应该是352)

记录

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+100;
const int M=N*6+100;
int n,x,sum,MAX,MIN;
int a[N],b[N];
int v[N],minx,ans;
int dp[M*3+100];
int hf[M*3+100];
 main(){
	cin>>n;
	minx=0x3f3f3f3f;
	for(int i=1;i<=n;i++){
		cin>>a[i]>>b[i];
		sum+=a[i]-b[i];
		v[i]=(b[i]-a[i])*2;
//		cout<<v[i]<<endl;
		if(v[i]>=0)MAX+=v[i];
		else MIN+=v[i];
	}
	dp[0+M]=true;
	hf[0+M]=0;
	for(int i=1;i<=n;i++){
		for(int j=MAX+1;j>=MIN-1;j--){
			if(dp[j-v[i]+M]==true){
				dp[j+M]=true;
//				cout<<j<<" from "<<j-v[i]<<endl;
				if(j!=0&&hf[j+M]==0)hf[j+M]=hf[j-v[i]+M]+1;
				else hf[j+M]=min(hf[j+M],hf[j-v[i]+M]+1);
			}
		}
	}
//	cout<<MIN<<" "<<MAX<<" "<<sum<<endl;
	for(int i=MIN;i<=MAX;i++){
		if(dp[i+M]){
//			cout<<i<<" "<<hf[i]<<endl;
			if(minx>abs(sum+i)){
//				cout<<"!"<<i<<" "<<hf[i]<<" "<<abs(sum+i)<<endl;
				minx=abs(sum+i);
				ans=hf[i+M];
			}
			else if(minx==abs(sum+i)){
//				cout<<"#"<<i<<" "<<hf[i]<<" "<<abs(sum+i)<<endl;
				ans=min(ans,hf[i+M]);
			}
		}
	}
	cout<<ans<<endl;
	return 0;
}
2023/8/18 15:12
加载中...