time limit: 1000ms
memory limit: 65536kb
submit
statistic
problem description
在乙個遙遠的數學魔法國度,小明在學習乙個魔法,這個魔法需要一些施法材料,所幸的是施法材料已經準備好了,下一步就是建立魔法陣了,每乙個施法材料都有乙個特性值,表示為乙個大於1小於10 ^ 7的整數,當且僅當乙個材料的特性值是另乙個材料的特性值的倍數的時候,他們才可以建立法力連線。比如說,乙個特性值為6和乙個特性值為9的施法材料是不可以建立法力連線的,而乙個特性值為9和乙個特性值為18的材料是可以建立法力連線的,值得注意的是法力連線是雙向的。乙個穩定的魔法陣要求屬於這個法陣的材料之間不存在任何兩個不直接連線的施法材料,比如說由(1,3,9)組成的魔法陣是穩定的,而(3,6,9)組成的魔法陣是不穩定的,因為值為6和值為9的材料無法建立連線。乙個魔法陣的威力定義為這個法陣需要的材料的個數。
現在小明已經收集到了一些材料,他想要知道在知道他收集的材料的特性值的前提下,能建立的最大威力的魔法陣的消耗材料的數量是多少。
input
首先乙個整數t,代表資料組數(t<=80)
對於每一組資料,第一行是乙個整數n,代表小明收集的施法材料的數量(1 < = n < = 1000)
接下來一行乙個有n個數,以空格隔開,分別代表n個施法材料的特性值,每個數1 < = a < = 10 ^ 7
具體見樣例
output
每組資料輸出一行乙個整數,代表最大威力的魔法陣的需要的材料的個數
example input
251 2 4 8 16
812 24 1 2 4 8 72 16
example output
56
hint
魔法陣不一定是矩陣,施法材料可以隨意擺放。
類似於動規的水題,狀態方程類似於最長上公升子串行的演算法
#include using namespace std;
int a[10006],dp[10006];//dp陣列是儲存每個元素的狀態;
int main()
{ int t,n,m,i,j,mm;
scanf("%d",&t);
while(t--)
{mm=0;
scanf("%d",&n);
for(i=0;i
SDUT 3488 小明 魔法計畫
小明 魔法計畫 time limit 1000ms memory limit 65536kb submit statistic problem description 在乙個遙遠的數學魔法國度,小明在學習乙個魔法,這個魔法需要一些施法材料,所幸的是施法材料已經準備好了,下一步就是建立魔法陣了,每乙個...
小明的存錢計畫
時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述 小明的零花錢一直都是自己管理。每個月的月初媽媽給小明300元錢,小明會預算這個月的花銷,並且總能做到實際花銷和預算的相同。為了讓小明學習如何儲蓄,媽媽提出,小明可以隨時把整百的錢存在她那裡,到了年末她會加上20 還給小明。因此小...
小明的存錢計畫
小明的存錢計畫 時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述 小明的零花錢一直都是自己管理。每個月的月初媽媽給小明300元錢,小明會預算這個月的花銷,並且總能做到實際花銷和預算的相同。為了讓小明學習如何儲蓄,媽媽提出,小明可以隨時把整百的錢存在她那裡,到了年末她會加上20 ...