dp啊!難的真難,簡單的也真簡單,正讓人哭笑不得,喜憂參半 ?
完全揹包解法
狀態表示:f[i][j]
表示只從1~i中選,且總和等於j的方案數
狀態轉移方程:f[i][j] = f[i - 1][j] + f[i][j - i]
#include
using
namespace std;
const
int n=
1010
,mod=
1e9+7;
int n;
int f[n]
;int
main()
另解:
狀態表示:f[i][j]
表示總和為i,總個數為j的方案數
狀態轉移方程:f[i][j] = f[i - 1][j - 1] + f[i - j][j];
#include
using
namespace std;
const
int n=
1010
,mod=
1e9+7;
int n;
int f[n]
[n];
intmain()
#include
using
namespace std;
const
int n=10;
/*0的第一種情況:001~abc-1, 999
其餘數字:000~abc-1[1也特判]
以某數字出現在第4位為例
abc 1. num[i] < x, 0
2. num[i] == x, 0~efg——>efg+1
3. num[i] > x, 0~999 ——>1000
*/int
get(vector<
int> num,
int l,
int r)
//把按位數儲存的數字轉化成乙個整數
intpower10
(int x)
//10^x
intcountt
(int n,
int x)
//1~n中x出現的次數
n=num.
size()
;int res=0;
for(
int i=n-1-
!x;i>=
0;i--
)//列舉數字i可以出現在哪一位上,0時要特判
if(num[i]
==x) res+
=get
(num,i-1,
0)+1
;else
if(num[i]
>x) res+
=power10
(i);
}return res;
}int
main()
return0;
}
#include
using
namespace std;
const
int n=
12,m=
1/2^n種狀態
int n,m;
long
long f[n]
[m];
bool st[m]
;int
main()
else cnt++;if
(cnt&
1) st[i]
=false;}
memset
(f,0
,sizeof f)
; f[0]
[0]=
1;for(
int i=
1;i<=m;i++
)//列舉每一列
for(
int j=
0;j<
1<)//列舉第i行的狀態
for(
int k=
0;k<
1<)//列舉第i-1行的狀態if(
(j&k)==0
&&st[j|k]
) f[i]
[j]+
=f[i-1]
[k];
cout<]<}return0;
}
#include
using
namespace std;
const
int n=
20,m=
1
int w[n]
[n];
int f[m]
[n];
intmain()
#include
using
namespace std;
const
int n=
6010
;int n;
int h[n]
,e[n]
,ne[n]
,idx;
int w[n]
,f[n][2
];bool st[n]
;//判斷是否有根節點
void
add(
int a,
int b)
void
dfs(
int u)
}int
main()
int root=1;
//按照序號尋找根節點
while
(st[root]
) root++
;dfs
(root)
; cout<<
max(f[root][0
],f[root][1
])
}
#include
using
namespace std;
const
int n=
310;
int n,m;
int g[n]
[n];
int f[n]
[n];
int dx[4]
=,dy[4]
=;intdp
(int x,
int y)
return v;
}int
main()
模板 狀態壓縮dp
問題描述 給定一張 n個點的帶權無向圖,點從 0 n 1 標號,求起點 0 到終點 n 1 的最短hamilton路徑。hamilton路徑的定義是從 0 到 n 1 不重不漏地經過每個點恰好一次。輸入格式 第一行輸入整數n。接下來n行每行n個整數,其中第i行第j個整數表示點i到j的距離 記為a i...
狀態壓縮DP入門題
在n n n 20 的方格棋盤上放置n 個車 可以攻擊所在行 列 求使它們不 能互相攻擊的方案總數。僅供和我一樣的菜鳥們參考 以n 4為例子解析原始碼 include include using namespace std int64 a 1100000 int main cout 前乙個狀態壓縮的...
狀態壓縮DP入門題
1 本題為狀態壓縮題 2題目大意 3乙個矩陣裡有很多格仔,每個格仔有兩種狀態,可以放牧和不可以放牧,4可以放牧用1表示,否則用0表示,在這塊牧場放牛,要求兩個相鄰的方 5格不能同時放牛 不包括斜著的 即牛與牛不能相鄰。問有多少種放牛方 6案 一頭牛都不放也是一種方案 7要列舉每一行中的是否種植 也就...