oj練習 dp專題

2021-08-28 22:18:21 字數 872 閱讀 3927

1.poj 3744  scout yyf i

經典的dp模型,但是要用到快速矩陣冪加速,分段的思想 

# include # include # include # include using namespace std;

int mines[15];

void matrixmulti(double a[2][2], double b[2][2])

double quickpow(const double p, int x)

double a[2][2] = , res[2][2] = ;

while(x)

x/=2;

matrixmulti(a,a);

}return res[0][1]*(1-p);

}int main()

if(mines[1] == 1)

mines[0] = 0;

result = 1.0;

sort(mines, mines+num+1);

for(int i = 1; i <= num; ++i)

if(result < 0)

if(result > 1)

printf("%.7f\n", result);

}return 0;

}

心得:1.dp[i]=dp[i-2]*(1-p)+dp[i-1]*p,其實就是連續跟1-p/p相乘,自然想到矩陣加速。2.快速冪的思想,將o(n)降成o(lg(n))。

3.[0, 1; 1-p, p]  * [dp[i-2]; dp[i-1]] =  [dp[i-1]; dp[i]],然後變成冪運算之後就可以加速了。多次乘以相同的數值其實就是冪運算(乙個數就是整數冪,多個數的式子就是矩陣冪)

dp專題練習

這是一篇很水的blog 掃雷link include include include include using namespace std inline long long read while c 0 c 9 return f ans long long dp 10001 3 3 3 n,a 9...

決策單調性優化dp 專題練習

對於形如 dp i dp j i j i j 型別的轉移方程,維護乙個上凸包或者下凸包,找到切點快速求解 技法 1.單調佇列 在保證插入和查詢的x座標均具有單調性時可以使用 2.單調棧 二分 保證插入有單調性,不保證查詢有單調性 3.分治 1 或 2 在每次分治時將 l,mid 這段區間排序後插入,...

數字DP專題

hdu 2089 不要62 hdu 3555不能出現連續的49 uestc 1307相鄰的數差大於等於2 hdu 3652 出現13,而且能被13整除。hdu 3709平衡數 light oj 1140兩個數之間的所有數中零的個數。lightoj 1032 二進位制數中連續兩個 1 出現次數的和 c...