zoj 3747 (DP)(连续至多,连续至少)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5170
?
參考:
http://blog.csdn.net/cc_again/article/details/24841249
?
UPDATE:
第二次做的感受,說下這道題為什么用遞推。對于這種排序,且連續(xù)至多的問題,每個(gè)點(diǎn)放什么受到之前那個(gè)點(diǎn)是什么的影響,也就是說這個(gè)點(diǎn)的情況可以由前面那個(gè)點(diǎn)的情況推出來
?
題目意思:
給n個(gè)士兵排隊(duì),每個(gè)士兵三種G、R、P可選,求至少有m個(gè)連續(xù)G士兵,最多有k個(gè)連續(xù)R士兵的排列的種數(shù)。
?
一個(gè)最多,一個(gè)最少很難判斷。可以轉(zhuǎn)化成兩個(gè)最多。
至少有m個(gè) = ?取值 m~n =??{最多有n個(gè)} - {最多有m-1個(gè)}
?
因?yàn)槭乔罂偳闆r個(gè)數(shù),第n個(gè)的情況可以從第n-1個(gè)的情況推出,所以可以用遞推。
然后就是狀態(tài)方程:
第i個(gè)的情況,至少有u個(gè)G,k個(gè)R
dp[i][0] 表示 G ?
dp[i][1] 表示 R
dp[i][2] 表示 P
?
當(dāng)?shù)趇個(gè)為P時(shí) 前面沒有任何限制條件, dp[i][2] = dp[i-1][0] +?dp[i-1][1] +?dp[i-1][2]
當(dāng)?shù)趇個(gè)為G時(shí)
若 i<=u ? ? ? ? ? ? ? ? ? 沒有任何限制, dp[i][0] = dp[i-1][0] +?dp[i-1][1] +?dp[i-1][2]
若 i=u+1 需要減去前u個(gè)都是G的情況,dp[i][0] = dp[i-1][0] +?dp[i-1][1] +?dp[i-1][2]-1
若i>u+1 需要減去(i-1)~(i-u)個(gè)連續(xù)G的情況,dp[i][0] = dp[i-1][0] +?dp[i-1][1] +?dp[i-1][2]-dp[i-u-1][1]-dp[i-u-1][2]
當(dāng)?shù)趇個(gè)為R時(shí) 同G
#include <iostream> #include <string> #include <cstring> #include <cstdlib> #include <cstdio> #include <cmath> #include <algorithm> #include <stack> using namespace std;#define MEM(a,b) memset(a,b,sizeof(a)) #define pf printf #define sf scanf #define debug printf("!/m") #define INF 1100000 #define MAX(a,b) a>b?a:b #define blank pf("\n") #define LL long long #define M 1000000007LL dp[INF][5]; LL n,m,k,u,v;LL Cal() {dp[0][0] = 1;//初始化時(shí)可以隨意放一個(gè),沒有什么影響,因?yàn)楹竺嬉呀?jīng)把所有情況考慮進(jìn)去dp[0][1] = 0;dp[0][2] = 0;int i;for(i = 1;i<=n;i++){LL sum = (dp[i-1][0] + dp[i-1][1] + dp[i-1][2])%M;dp[i][2]=sum;if(i<=u)dp[i][0] = sum;else if(i==u+1)dp[i][0] = (sum-1)%M;elsedp[i][0] = (sum - dp[i-u-1][1] - dp[i-u-1][2])%M;if(i<=v)dp[i][1] = sum;else if(i==v+1)dp[i][1] = (sum - 1)%M;elsedp[i][1] = (sum - dp[i-v-1][0] - dp[i-v-1][2])%M;}return (dp[n][0]+dp[n][1]+dp[n][2])%M; }int main() {while(~sf("%lld%lld%lld",&n,&m,&k)){u = n;v = k;LL ans = Cal();u = m-1;v = k;ans = ((ans - Cal())%M+M)%M;pf("%lld\n",ans);}return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/qlky/p/5022649.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的zoj 3747 (DP)(连续至多,连续至少)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windbg调优Kafka.Client
- 下一篇: jquery plugins