比賽的時候想的是把n個n個的題目進行狀壓 但這樣不能講究順序,當時精神面貌也不好,真是挫死了
其實此題的另乙個角度就是乙個n個數的排列,如果我對n個人進行狀壓,外面套乙個按題目循序漸進的大迴圈,那麼,在當前做第i個題目,前i-1個題目已經做完,然後做完的人的狀態為j, j可能是1110 1101 1011什麼的(假設已經做了三道題),因為我這樣就可以只管狀態而不管順序了,我只取這種狀態下的最大值,他究竟是怎麼個順序排列我不用管
到此。。。好像問題就沒有什麼問題了,這種做法重複 m/n次最後把剩餘的再跑一下就可以了,因為每次考慮第i個題的時候 只和i-1有關,則用個滾動陣列即可,比較麻煩的是每次要清空,只能說空間和時間不可兼得啊
#include #include#include
#include
using
namespace
std;
double a[11][1010
];int
n,m;
double dp[2][1
<<11
];int
main()
int all=1
for (int i=0;i)
int p=0
;
double ans=0
;
for (int i=1;i)}}
printf(
"case #%d: %.5lf\n
",++kase,ans);
}}
hdu 檢測賽 Problem C(狀壓dp)
新年伊始,集訓隊迎來了15級新生。教練打算將大家n 2 n 20 個人分成ab兩隊,已知每兩個新生之間都有相互的思念值,如果分到一隊的話經常見面不會思念,但是如果不被分到一隊的話,他們就會無比思念對方,此時兩個人之間的思念值為f 0 f 10000 教練想知道,分隊使大家的思念值總和 即a隊的每個人...
hdu 6125 狀壓dp 分組
一道玄學題.其實一開始想的是對的,優化一下就好了 首先我們會發現,乘積不能被完全平方數整除等價於所有因子的每個質因子個數和都至多為1 可是500以內的質數很多,全找出來會 的 可我們會發現,如果乙個數的平方會在500以內,那麼這個數一定 22!所以,1 500中會存在的完全平方數的質因子一定在22以...
狀壓dp入門 hdu1565
思路 將數字轉化為2進製,表示每一行被選的數字的情況,首先預處理哪些數字是可以取得的合法狀態,因為上下行之間沒有公共邊,可以通過這一條件知道合法狀態滿足右移或左移以為後 運算的和為0,將所有哥發的存入陣列中。然後直接暴力三重迴圈,用陣列f i j 表示前i行的第i行選取狀態用j的二進位制的表示的最大...