91pts乱搞做法求助 悬棺
查看原帖
91pts乱搞做法求助 悬棺
663195
zhouyk0501楼主2024/9/20 11:42
#include<bits/stdc++.h>
using namespace std;
#define ppp optimize
#pragma GCC ppp("-Ofast")
#pragma GCC ppp(3,"-Ofast","inline")
#pragma GCC ppp(4,"-Ofast","inline")
#pragma GCC ppp(5,"-Ofast","inline")
#pragma GCC ppp(6,"-Ofast","inline")
#pragma GCC ppp(2,"-Ofast","inline")
#pragma GCC ppp(7,"-Ofast","inline")
#define flush() fwrite(obuf,1,O-obuf,stdout)
#define putchar(x) ((O==obuf+(1<<21))&&(flush(),O=obuf)),*O++=x
char buf[1<<23],*p1=buf,*p2=buf,obuf[1<<23],*O=obuf;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
inline int read() {
	register int x=0,f=1;register char ch=getchar();
	while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
	while(isdigit(ch)) x=x*10+(ch^48),ch=getchar();
	return x*f;
}
inline void write(register long long x){
    if(x<0) putchar('-'),x=-x;
    if(x>9) write(x/10);
    putchar((x%10)^48);
}
struct Flush{
    ~Flush(){flush();}
}_;
int Arr[1010],Brr[1010],nz[1010];
unordered_map<int,int> dp;
unordered_map<int,bool> book;
main(){
	int n=read(),Sum_First=0,Sum_Second=0;
	for(int i=1;i<=n;i++){
		Arr[i]=read(),Brr[i]=read();
		Sum_First+=Arr[i],Sum_Second+=Brr[i];
	}
	int cz=Sum_First-Sum_Second;
	for(int i=1;i<=n;i++) nz[i]=2*Brr[i]-2*Arr[i];
	dp[cz]=0;
	book[cz]=true;
	for(int i=1;i<=n;i++){
		for(int j=-6000;j<=6000;j++){
			if(book[j-nz[i]]){
				if(!book[j]) dp[j]=dp[j-nz[i]]+1;
				else dp[j]=min(dp[j-nz[i]]+1,dp[j]);
				book[j]=true;
			}
		}
	}
	for(int i=0,j=0;i<=6000&&j>=-6000;i++,j--){
		if(book[i]&&book[j]){
			cout<<min(dp[i],dp[j]);
			return 0;
		}else if(book[i]){
			cout<<dp[i];
			return 0;
		}else if(book[j]){
			cout<<dp[j];
			return 0;
		}
	}
}
2024/9/20 11:42
加载中...