班服題目芒果君:考試的時候完全沒看出來這題是狀壓dp,還想了好久的組合數學……最後只能打暴力qaq(shirt.pas/.c/.cpp)
時間限制:1s;記憶體限制 128mb
題目描述:
要開運動會了,神犇學校的n個班級要選班服,班服共有100種樣式,編號1~100
。現在每個班都挑出了一些樣式待選,每個班最多有100個待選的樣式。要求每個班最終選定一種樣式作為班服,且該班的樣式不能與其他班級的相同,求所有可能方案的總數,由於方案總數可能很大,所以要求輸出mod 1000000007後的答案。
輸入描述:
共有t組資料。
對於每組資料,第一行為乙個整數n,表示有n個班級。
2~n+1行,每行有最多100個數字,表示第i-1班待選班服的編號。
輸出描述:
對於每組資料,輸出方案總數 mod 1000000007後的答案。
樣例輸入:23
510012
510023
58100樣例輸出:44
資料範圍:
對於30%的資料,1
<=t<=3, 1
<=n<=3
,每班待選樣式不超過10種。
對於50%的資料,1
<=t<=5, 1
<=n<=5
,每班待選樣式不超過50種。
對於100%的資料,1
<=t<=10, 1
<=n<=10,每班待選樣式不超過100種。
這道題的n很小(10),可以說是一種提示。那我們可以用二進位制來表示n被選擇的狀態,末狀態是(1<
1 #include2 #include3 #include4 #include5 #include6 #include7#define ll long long
8#define eps 1e-8
9using
namespace
std;
10const
int mod=1e9+7;11
int t,n,x,mp[110][110],f[110][1
<<11
];12
intmain()
1326
}27 f[0][0]=1;28
for(int i=1;i<=100;++i)
29for(int j=0;j
35 printf("
%d\n
",f[100][(1
<1
]);36}37
return0;
38 }
班服 狀壓DP NOIP模擬賽
沒有題面。看到這個坑爹的資料量 最多10個班級 大概會對狀壓有一些想法 反正我是沒想到 本題暴搜可得50分 從資料量可以看出 狀態壓縮壓縮的是已選擇的班級而不可能是班服種類。dp i j 表示 前i種班服到達狀態j的方案數。首先,如果不選第i種班服,那麼dp i j dp i 1 j 如果要選第i種...
《省賽模擬賽補》
c題 比賽的時候已經想到了統計最底層的每個序列的出現次數,但是一開始想的是建圖之後dfs處理,但是發現很難處理出來。其實正確的思路是拓撲排序去處理次數。我們在最後建圖完成之後,倒著從n回去拓撲即可。但是這裡有個坑點,就是一開始統計入度可能是不正確的。例如 3 1 2 4 1 2 3是1,2的父節點,...
日常模擬賽
none 100 100 10 210 不太會做.好像.是個sb題.嗯.div3t1難度 include include define int long long define gc getchar define pc putchar inline int read void print int x...