本来老师让用二分图写...
但!!!
竟然找规律水过去啦hhhhh
题意:给你n个柱子, 你需要从1开始往柱子上穿珠子, 并且在一个柱子上相邻的两个数必须和为平方数;问你最多穿多少珠子;
蒟蒻的我开始手动模拟QAQ;
柱子 -> 最大个数
1 -> 1
2 -> 3
3 -> 7
4 -> 11
5 -> 17
规律已出:
设f[n]表示n个柱子最多穿的数字个数;
f[i] = f[i-1] + i + i % 2;!!!!!
事实证明模拟还是有必要的QAQ
有时可以简化问题!!!
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int T, n;
int f[51];
int main()
{
cin>>T;
f[1] = 1;
for(register int i=2;i<=50;i++)
{
f[i] = f[i-1] + i + (i % 2);
}
while(T--)
{
scanf("%d",&n);
printf("%d\n",f[n]);
}
return 0;
}
很短是不是啊!!!