站外题求助
查看原帖
站外题求助
738306
chasing_dream楼主2022/7/22 18:49

1.给出N * N个数字(N<=4)和一个N * N的方格,每个数字填入一个方格,使得最终方格每行每列和每个对角线上的和都相等。

感觉硬搜索不行,求助思路

2.题目:给定N个数,第i个数的值为Ai,你现在可以从中选择一些数字,问选出数字的和模P最大为多少。

#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read()
{
    register int x=0,f=1;
    char c=getchar();
    while(c<'0'||c>'9')
    {
        if(c=='-') f=-1;
        c=getchar();
    }
    while(c>='0'&&c<='9')
    {
        x=(x<<3)+(x<<1)+(c^48); 
        c=getchar();
    }
    return x*f;
}
bool cmp(int x,int y){return x>y;}
int n,p,maxx;
int a[40];
void dfs(int i,int now)
{
	if(now==p-1)
	{
		cout<<now;
		exit(0);
	}
	if(i==n)
	{
		now+=a[i];
		now=now%p;
		maxx=max(now,maxx);
		return;
	}
	dfs(i+1,(now+a[i])%p);
	dfs(i+1,now%p);
}
signed main()
{
	n=read(),p=read();
	for(int i=1;i<=n;i++) a[i]=read()%p;
	sort(a+1,a+n+1,cmp);
	dfs(0,0);
	cout<<maxx;
	return 0;
}

n<=35,但是我这份代码被卡了(但我不知道怎么剪枝)。

qwq

2022/7/22 18:49
加载中...