砝码竟然只能全放在右盘?
查看原帖
砝码竟然只能全放在右盘?
1283884
Xxhalf楼主2025/2/2 16:56

不会只有我一个人认为砝码左右盘都能放吧?

我一开始按砝码左右盘都能放来做,竟然只WA了#4
调了我好久......
下面请欣赏题目意思理解错误之后做出来的92分代码

#include<bits/stdc++.h>
#define N 1010
using namespace std;
bool a[2*N+1],b[2*N+1];
int sum,ans=0;
void dp(int x,int w)
{
	for(int i=-sum;i<=sum;i++)
		if(b[N+i])
			for(int j=-x;j<=x;j++)
				a[N+i+j*w]=1;
	for(int i=-sum;i<=sum;i++)if(a[N+i])b[N+i]=1;
}
int main()
{
	int a1,a2,a3,a5,a10,a20;
	cin>>a1>>a2>>a3>>a5>>a10>>a20;
	sum=a1+a2*2+a3*3+a5*5+a10*10+a20*20;
	for(int i=sum;i<=sum;i++)a[N+i]=b[N+i]=0;
	a[N]=b[N]=1;
	dp(a1,1);
	dp(a2,2);
	dp(a3,3);
	dp(a5,5);
	dp(a10,10);
	dp(a20,20);
	for(int i=1;i<=sum;i++)if(a[N+i])ans++;
	//for(int i=1;i<=sum;i++)cout<<i<<' '<<a[N+i]<<'\n';
	cout<<"Total="<<ans;
}
2025/2/2 16:56
加载中...