hdu5045 dp 狀態壓縮

2022-09-23 23:48:18 字數 748 閱讀 1994

題意:

給出n個人,m道題;每道題只能乙個人做;現在給出n行m列.是每個人做每一道題的成功率;

你現在要選出哪些人做哪些題,使成功率和最大.但是有乙個條件做到任意一題時,做最多的人只能比做最少的人多做一道;

就是如果10個人,那麼前10題必須一人一題;

思路:因為限制條件,所以前n道題,必須分給n個人一人一道,那麼每人只能做一次;

那麼用狀態壓縮表示哪些人做過了;

比如5個人00110;那麼下一道題就可以選擇剩下的3個人做,並且比較出乙個最優的選擇;

當狀態變成11111時,就要重新置零;

所以用乙個dp[i][j]表示前i道題,已經做的人的狀態是j;

#include

#include

#include

using namespace std;

double p[15][1005];

double dp[1005][1 << 10];

int n,m;

double solve()

} dp[0][0] = 0;

for(int i = 0; i < m; i++)

} }double ans = 0.0;

for(int i = 0; i < (1 << n); i++)

return ans;

}int main()

} printf("case #%d: %.5lf\n",cas++, solve());

}}

Hdu 3811 狀態壓縮 DP

題意 給定數n n 17 求乙個n位數,每位可選1 n中的乙個,且每位不同,並且滿足給定的條件,求方案數。給定條件為m個 x y 表示第x位為y的滿足要求。滿足m中的乙個條件即正確。演算法 dp 狀態壓縮 分析 首先不考慮條件的總方案數為n 我們先算不滿足條件的方案,因為m個條件之間是或者 關係,有...

hdu 1074 狀態壓縮dp

題目描述 有 n 門課程的作業,每門都有完成期限d,與完成所需時間c,若超過期限,1天扣1分。問完成這n門作業至少要扣多少分,並輸出扣分最少的做作業順序。思路 dp i 記錄完成狀態為i的情況下的資訊。完成所需時間,上乙個狀態,最小扣分 狀態方程 dp i min dp j cost j,i 從j狀...

hdu1565 dp狀態壓縮

題意 給你乙個n n的格仔的棋盤,每個格仔裡面有乙個非負數。從中取出若干個數,使得任意的兩個數所在的格仔沒有公共邊,就是說所取的數所在的2個格仔不能相鄰,並且取出的數的和最大。解題思路 先找出所有能成立的狀態,即 i i 1 0,表示每一行都沒有相鄰的,然後遍歷if q j 1 再進行動態更新,用上...