一个不行的证明
设
b1+b2+b3+...+bn=C
也就是说
2b1∗2b2∗2b3∗....∗2bn=2C
那么,加上a的话,也就是
(2b1)a1>=2C
得到
b1>=C/a1
那么就是说
C/a1+C/a2+C/a3+...+C/an<=C
只要这条式子成立,C就是一个合法的解了
明显的两边除以C
所以只要
1/a1+1/a2+1/a3+...+1/an<=1
,就存在解了
然而这样并不可行,因为你不能是小数啊,他一定要向上取整,于是就GG了
我只是说这个证明不行,但题解似乎是那个结论。。
虽然我觉得结论是错的
另一个做法
于是我就去学了另外一个做法
%%%
感觉这个正常多了
CODE:
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int a[15];
int n;
bool check (int x)
{
int sum=0;
for (int u=1;u<=n;u++)
sum=sum+ceil((double)x/a[u]);
return sum<=x;
}
int main()
{
int T;
scanf("%d",&T);
while (T--)
{
scanf("%d",&n);
if (n>10)
{
while (n--)
{
int x;
scanf("%d",&x);
}
printf("NO\n");
continue;
}
else
{
for (int u=1;u<=n;u++) scanf("%d",&a[u]);
bool tf=false;
for (int u=1;u<=500000;u++)
if (check(u))
{
tf=true;break;
}
if (tf) printf("YES\n");
else printf("NO\n");
}
}
return 0;
}