我是直接用贪心跑的,但其实可以用网络流来跑。
对于网络流,通过分析可以得到,如果将i+j为完全平方数的i与j连上边。
那么每一根柱子就是一条路径,答案就是有n条路径的最小路径覆盖。
可以自己画图YY。
#include
#include
#include
using namespace std;
const int N=65;
int n;
vector v[N];
inline bool pd(int x)
{
int root=floor(sqrt(x));
return root*root==x;
}
int main()
{
scanf("%d",&n);
int x=1;
for (int k=1; k<=n; k++)
{
while (1)
{
bool flag=false;
for (int i=0; i