題目大意:有m個問題。 n個人分別對m個問題有自己的解法,僅僅有ab兩種。
即,相當於n條長度為m的01序列,在m中任意選取問題,使得序列在相應的位置上的答案不同的序列有至少k對,問選取問題的方案數。
題目思路:
狀態壓縮dp,dp[i][state] 表示 state狀態在前i行一共有i對不同。
即對於每種狀態state,統計對於當前問卷和之前問卷有多少對不同。他通過vis[now]++,陣列記錄某個狀態已經出現過多少次。
那麼狀態轉移方程為: dp[i][state] = dp[i-1][state] + i-1 - vis[now]。
對於第i份問卷,他最多和前面i-1份問卷都不相同從而產生i-1對不同的問卷。 但是,在前i-1乙份中可能存在和第i分問卷相同的問卷,因此再減去重複的,剩下就是第i份問卷的貢獻了。
now是state& cur[i] ,相當於state規範了選哪幾個問題,1代表選擇某個問題,和cur[i]按位與之後,剩下的就是第i行在state規範下的問題回答情況了。
#includeusing namespace std;
const int maxn =1000+10;
char s[maxn];
int cur[maxn];
int dp[maxn][1<<11],vis[1<<11];
int main()
}printf("case #%d: ",cas++);
if(n*(n-1)/2=k)ans++;
}printf("%d\n",ans);}}
return 0;
}
百度之星 1001 調查問卷
鏈結 有m個問題。n個人分別對m個問題有自己的解法,僅僅有ab兩種。相當於n條長度為m的01序列 在m中任意選取問題,使得序列在相應的位置上的答案不同的序列有至少k對,問選取問題的方案數。解法 狀態壓縮dp,dp i state 表示 state狀態在前i行一共有幾對不同。那麼狀態轉移方程為 dp ...
2018百度之星資格賽 1001 調查問卷
題意 度度熊為了完成畢業 需要收集一些資料來支撐他的論據,於是設計了乙份包含 mmm 個問題的調查問卷,每個問題只有 a 和 b 兩種選項。將問卷散發出去之後,度度熊收到了 nnn 份互不相同的問卷,在整理結果的時候,他發現可以只保留其中的一部分問題,使得這 nnn 份問卷仍然是互不相同的。這裡認為...
2014百度之星1001
problem description 魔法師百小度也有遇到難題的時候 現在,百小度正在乙個古老的石門面前,石門上有一段古老的魔法文字,讀懂這種魔法文字需要耗費大量的能量和大量的腦力。過了許久,百小度終於讀懂魔法文字的含義 石門裡面有乙個石盤,魔法師需要通過魔法將這個石盤旋轉x度,以使上面的刻紋與天...