萌新32pts求助
查看原帖
萌新32pts求助
235926
1kri楼主2020/7/20 19:39

用的记搜,感觉思路没什么问题,但只有 32ptsWA32pts(WA) ,已经调到自闭了。

#include <iostream>
#include <cstdio>
#include <cstring>
#define inf 1000000000
using namespace std;
int c,n,t[1005],b[1005],f[1005][605][45];
inline int dfs(int now,int nows,int last){
	if (now>n)return 0;
	if (f[now][nows][now-last+10]!=-1)return f[now][nows][now-last+10];
	if ((nows&1)!=0)return dfs(now+1,nows>>1,last);
	int s=inf;
	for (int i=0;i<=b[now];i++){
		if (last==0)t[last]=t[now+i];
		if ((nows&(1<<i))==0)s=min(s,(t[now+i]|t[last])-(t[now+i]&t[last])+dfs(now,nows|(1<<i),now+i));
	}
	return f[now][nows][now-last+10]=s;
}
int main(){
	cin>>c;
	while(c--){
		cin>>n;
		memset(f,-1,sizeof(f));
		memset(b,-1,sizeof(b));
		memset(t,0,sizeof(t));
		memset(b,0,sizeof(b));
		for (int i=1;i<=n;i++)cin>>t[i]>>b[i];
		for (int i=n;i>=1;i--)b[i]=min(b[i],min(b[i+1]+1,n-i));
		cout<<dfs(1,0,0)<<endl;
	}
	return 0;
} 
2020/7/20 19:39
加载中...