HPU 1010 QAQ的序列價值 狀態壓縮

2021-07-24 05:03:17 字數 1819 閱讀 6603

時間限制: 3 sec  

記憶體限制: 128 mb

提交: 60  

解決: 13 [

提交][

狀態][

討論版]

qaq有乙個序列,元素個數有n

n個。

他認為乙個序列的價值的是:該序列中不同元素之和。

比如說:序列(1,

1,2,

2)(1,1,2,2)

價值為3

3。 現在qaq想知道所有子串行的價值之和。

第一行輸入乙個整數t

t,代表有t

t組測試資料。

每組資料佔兩行,第一行輸入乙個整數n

n,代表序列元素個數。

接下來一行輸入n

n個整數a

a。注:1

<=

t<=

10000,1

<=

n<=50,

1<=a[

]<=

10 1<=t<=10000,1<=n<=50,1<=a<=10

。對每組測試資料,輸出乙個整數代表所有子串行價值之和。

結果很大,請對(109

+7) (109+7)

取餘。

2

31 1 1

410 10 10 8

7

204

對於第二組測試資料一共有15

15個子序列:(10

)、(10

)、(10

)、(8

)、(10

,10)、

(10,10

)、(10

,10)、

(10)、(10)、(10)、(8)、(10,10)、(10,10)、(10,10)、(10

,8)、

(10,8

)、(10

,8)、

(10,10

,8)、

(10,10

,8)、

(10,8)、(10,8)、(10,8)、(10,10,8)、(10,10,8)、(10

,10,8

)、(10

,10,10

)、(10

,10,10

,8) (10,10,8)、(10,10,10)、(10,10,10,8)

。價值之和為204

204。

czy

題解(czy):

標程應該是這樣的,我們用狀態壓縮的方法記錄每個元素的情況。

記num[i]是i元素出現的次數。

然後列舉每乙個狀態,共有(1<<10) - 1共1023種狀態。

對於狀態s而言,若出現n個元素,那麼它們的組合方案就是

cnt = (2^num[i] - 1) * (2^num[i+1] - 1) * ... *(2^num[n] - 1)。

狀態s的貢獻就是出現的不同元素和sum 乘上 組合方案cnt。

我們累加貢獻即可。

注意1 << x的時候,如果爆int的話,要這樣寫1ll << x。

ac**:

#include#includetypedef long long ll;

const int mod=1e9+7;

////ll pow_mod(ll base,ll y,ll mod)

// // return ans;

//}

int main()

}ans=(ans+times*tota%mod)%mod;

} printf("%lld\n",ans);

} return 0;

}

HPU 1010 QAQ的序列價值

1010 qaq的序列價值 時間限制 3 sec 記憶體限制 128 mb 提交 60 解決 13 提交 狀態 討論版 題目描述 qaq有乙個序列,元素個數有n 個。他認為乙個序列的價值的是 該序列中不同元素之和。比如說 序列 1,1,2,2 價值為3 現在qaq想知道所有子串行的價值之和。輸入 第...

HPU 1009 QAQ的區間價值

1009 qaq的區間價值 時間限制 1 sec 記憶體限制 128 mb 提交 75 解決 49 提交 狀態 討論版 題目描述 qaq有乙個整數序列,元素個數有n 個,分別為1,2,3 n 1,n。假定用陣列a來依次記錄n個元素,那麼區間 i,j 的價值 sum i,j check i,j 其中s...

hpu 1012 QAQ的區間統計

時間限制 1 sec 記憶體限制 128 mb 提交 142 解決 42 提交 狀態 討論版 qaq有乙個區間 l,r 已知qaq很喜歡長度為奇數的區間,現在請你告訴他有多少個長度為奇數的子區間。對於區間 2 4 來講,它的子區間有 2 2 2 3 2 4 3 3 3 4 4 4 共6個。為了簡化題...