树形dp..水 ------------------------------------------------------------------------ #include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #define rep( i , n ) for( int i = 0 ; i < n ; i++ ) #define clr( x , c…
设f[u][0/1]为u这个点不选/选,转移的时候从儿子转移,f[u][1]=sum(f[son][0])+1,f[u][0]=sum(max(f[son][0],f[e[i].to][1])) #include<iostream> #include<cstdio> using namespace std; const int N=50005; int n,h[N],cnt,f[N][2]; struct qwe { int ne,to; }e[N<<1]; int r…
状压dp dp( x , S ) 表示最后一个是 x , 当前选的奶牛集合为 S , 则状态转移方程 : dp( x , S ) = Σ dp( i , S - { i } ) ( i ∈ S , abs( h[ i ] - h[ x ] ) > k ) ------------------------------------------------------------------------------------------- #include<cstdio> #includ…
设f[i][j]为奶牛选取状态为i,最后一头选的为j,转移直接f[k][(1<<(k-1)|i]+=f[j][i] #include<iostream> #include<cstdio> #include<algorithm> using namespace std; int n,m,p[20],a[20]; long long f[20][1<<16],ans; int main() { scanf("%d%d",&…
开始读错题了,然后发现一眼切~ Code: #include <cstdio> #include <algorithm> #define ll long long #define setIO(s) freopen(s".in","r",stdin) using namespace std; int s[20]; ll dp[1<<18][17],fac[20]; int main() { // setIO("input&…
无限背包dp.. 因为题目中说至少到 H 磅 , 我就直接把 H * 2 了.. -------------------------------------------------------------------------- #include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #define rep( i , n ) for( int i = 0 ; i…