題目傳送
存乙個狀態就可以了,用來判斷前一位是不是6的情況
具體看**注釋
ac**
#include
inline
long
long
read()
while
(c >=
'0'&& c <=
'9')
return x*s;
}using
namespace std;
#define newnode (treenode *)malloc(sizeof(treenode))
#define mem(a,b) memset(a,b,sizeof(a))
#define lowbit(x) (x)&(-x)
const
int n =
2e5+10;
const
long
long infinf =
0x7f7f7f7f7f7f7f
;const
int inf =
0x3f3f3f3f
;const
double eps =
1e-5
;const
int mod =
1e9+7;
const
double ii =
acos(-
1);const
double pp =
(ii*
1.0)/(
180.00);
typedef
long
long ll;
typedef
unsigned
long
long ull;
typedef pair<
int,
int> pii;
typedef pair piil;
ll dp[20]
[2],a[20]
;ll dfs
(ll pos,ll pre,ll sta,
bool limit)if(
!limit) dp[pos]
[sta]
= temp;
//記憶化
return temp;
//否則有限制的話就不用記憶化,因為只判斷一次有限制的時候
}ll solve
(ll num)
ll sum =
dfs(pos-1,
-1,0
,true);
// for(int i = pos-1;i >= 0;i--)
// cout << dp[i][0] << " " << dp[i][1] << endl;
return sum;
}signed
main()
}
不要62(數字dp板子題)
傳送門 hdu 2089 杭州人稱那些傻乎乎粘嗒嗒的人為62 音 laoer 杭州交通管理局經常會擴充一些的士車牌照,新近出來乙個好訊息,以後上牌照,不再含有不吉利的數字了,這樣一來,就可以消除個別的士司機和乘客的心理障礙,更安全地服務大眾。不吉利的數字為所有含有4或62的號碼。例如 62315 7...
石子合併(區間DP板子題)
設有n堆石子排成一排,其編號為1,2,3,n。每堆石子有一定的質量,可以用乙個整數來描述,現在要將這n堆石子合併成為一堆。每次只能合併相鄰的兩堆,合併的代價為這兩堆石子的質量之和,合併後與這兩堆石子相鄰的石子將和新堆相鄰,合併時由於選擇的順序不同,合併的總代價也不相同。例如有4堆石子分別為 1 3 ...
動態dp 板子
瞎扯兩句吧 先從序列上理解,維護鏈的最大獨立集。放在樹上的話,兒子都可以轉移,把輕兒子的轉移放在子鏈鏈頭更新,然後每條鏈都處理成序列就行了。注意一點,因為維護的是序列,所以單點存放的矩陣是只含輕兒子和自己的貢獻,相當於把輕兒子的子樹縮給了自己,而重兒子維護的東西是通過線段樹上維護的區間貢獻過來的。咕...