锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
銆愰瑙c戯細鐢ㄦ爲鐨勫垎娌誨彲瑙o紝浣嗘槸鍐欒搗鏉ユ瘮杈冮夯鐑︺?br /> 璁劇姸鎬乨p[i][j]琛ㄧず浠涓烘牴鐨勫瓙鏍戠殑鑺傜偣鍒癷鐨勮窛紱繪伆涓簀鐨勪釜鏁般?br /> 鐒跺悗鍒╃敤涔樻硶鍘熺悊姹傚嚭絳旀錛屽啀鎶婂効瀛愮殑淇℃伅浼犵粰鐖朵翰銆?br />
銆愪唬鐮併戯細
2 #include "cstdio"
3 #include "cstring"
4 #include "algorithm"
5 #include "vector"
6 #include "queue"
7 #include "cmath"
8 #include "string"
9 #include "cctype"
10 #include "map"
11 #include "iomanip"
12 using namespace std;
13 #define pb push_back
14 #define lc(x) (x << 1)
15 #define rc(x) (x << 1 | 1)
16 #define lowbit(x) (x & (-x))
17 #define ll long long
18 #define maxn 50050
19
20 int n, k;
21 ll dp[50050][505];
22 ll ans;
23 vector<int> vec[maxn];
24
25 void dfs(int u, int fa) {
26 memset(dp[u], 0, sizeof(dp[u]));
27 dp[u][0] = 1;
28 int size = vec[u].size();
29 for(int i = 0; i < size; i++) {
30 int v = vec[u][i];
31 if(v == fa) continue;
32 dfs(v, u);
33 for(int j = 1; j <= k; j++)
34 ans += dp[u][j-1] * dp[v][k-j];
35 for(int j = 1; j <= k; j++)
36 dp[u][j] += dp[v][j-1];
37 }
38 }
39
40 int main() {
41 int u, v;
42 while(cin >> n >> k) {
43 for(int i = 0; i < maxn; i++) vec[i].clear();
44 for(int i = 1; i < n; i++) {
45 cin >> u >> v;
46 vec[u].pb(v);
47 vec[v].pb(u);
48 }
49 ans = 0;
50 dfs(1, -1);
51 cout << ans << endl;
52 }
53 return 0;
54 }
55
銆愰瑙c戯細鍙渶瑕佺敤spfa dp涓嬈″嵆鍙紝瑕佽褰曠姸鎬佺殑鍓嶉┍鐘舵佷繚瀛樻柟妗堛?br />
銆愪唬鐮併戯細
2 #include "cstdio"
3 #include "cstring"
4 #include "algorithm"
5 #include "vector"
6 #include "queue"
7 #include "cmath"
8 #include "string"
9 #include "cctype"
10 #include "map"
11 #include "iomanip"
12 using namespace std;
13 #define pb push_back
14 #define mp make_pair
15 #define fi first
16 #define se second
17 #define lc(x) (x << 1)
18 #define rc(x) (x << 1 | 1)
19 #define lowbit(x) (x & (-x))
20 #define ll long long
21 const int inf = 1 << 29;
22 int dp[210][1<<7], pre[210][1<<7];
23 int n, m, k, nn, mm;
24 int hash[210];
25 int maz[110][110];
26 char g[110][110];
27 bool visit[210][1<<7];
28 int dx[] = {0, 0, -1, 1};
29 int dy[] = {-1, 1, 0, 0};
30
31 struct Node {
32 int u, st;
33 Node(){}
34 Node(int _u, int _st) {
35 u = _u, st = _st;
36 }
37 };
38 queue<Node> que;
39
40 bool check(int x, int y) {
41 if(x >= 0 && x < n && y >= 0 && y < m) return true;
42 return false;
43 }
44
45 void update(int u, int st, int w, int fa) {
46 if(dp[u][st] > w) {
47 dp[u][st] = w;
48 pre[u][st] = fa;
49 if(!visit[u][st]) {
50 que.push(Node(u, st));
51 visit[u][st] = true;
52 }
53 }
54 }
55
56 void dfs(int u, int st) {
57 int x = u / m, y = u % m;
58 g[x][y] = 'X';
59 if(pre[u][st] == -1) return;
60 else {
61 int v = pre[u][st] / 1000, stt = pre[u][st] % 1000;
62 dfs(v, stt);
63 if(stt - st) dfs(v, st - stt);//鐗涘弶鐨勮褰曪紝鎷嗗垎褰撳墠鐘舵?/span>
64 }
65 }
66
67 void solve() {
68 while(!que.empty()) {
69 Node now = que.front();
70 que.pop();
71 int u = now.u, x = now.u / m, y = now.u % m, st = now.st;
72 visit[u][st] = false;
73 for(int i = 0; i < 4; i++) {
74 int xx = x + dx[i], yy = y + dy[i];
75 if(!check(xx, yy)) continue;
76 int v = xx * m + yy;
77 update(v, st, dp[u][st] + maz[xx][yy], u * 1000 + st);
78 }
79 int t = mm - 1 - st;
80 for(int i = t; i; i = (i-1) & t) {
81 update(u, i | st, dp[u][i] + dp[u][st] - maz[x][y], u * 1000 + st);
82 }
83 }
84 int ans = inf, u;
85 for(int i = 0; i < nn; i++) {
86 if(ans > dp[i][mm-1]) {
87 ans = dp[i][mm-1];
88 u = i;
89 }
90 }
91 dfs(u, mm - 1);
92 cout << ans << endl;
93 for(int i = 0; i < n; i++) {
94 for(int j = 0; j < m; j++)
95 cout << g[i][j];
96 cout << endl;
97 }
98 }
99
100 int main() {
101 while(cin >> n >> m >> k) {
102 while(!que.empty()) que.pop();
103 for(int i = 0; i < n; i++) {
104 for(int j = 0; j < m; j++) {
105 cin >> maz[i][j];
106 g[i][j] = '.';
107 }
108 }
109 nn = n * m, mm = 1 << k;
110 memset(hash, 0, sizeof(hash));
111 memset(visit, false, sizeof(visit));
112 for(int i = 0; i < nn; i++)
113 for(int j = 0; j < mm; j++)
114 dp[i][j] = inf;
115 for(int i = 0, a, b; i < k; i++) {
116 cin >> a >> b;
117 a--, b--;
118 int u = a * m + b;
119 hash[u] = 1 << i;
120 update(u, hash[u], maz[a][b], -1);
121 }
122 solve();
123 }
124 return 0;
125 }
126
銆愰瑙c戯細鍗氬紙錛岀洿鎺ヨ蹇嗗寲鎼滅儲鍗沖彲錛屽彧瑕佹悳鍒扮涓涓繀璐ユ佸氨鍙互璺沖嚭銆?br /> 鍒╃敤map鏉ュ鐞嗗彲浠ユ妸浠g爜鍐欏緱寰堢煭銆?br />
銆愪唬鐮併戯細
2 #include "cstdio"
3 #include "cstring"
4 #include "algorithm"
5 #include "vector"
6 #include "queue"
7 #include "cmath"
8 #include "string"
9 #include "cctype"
10 #include "map"
11 #include "iomanip"
12 using namespace std;
13 #define pb push_back
14 #define lc(x) (x << 1)
15 #define rc(x) (x << 1 | 1)
16 #define lowbit(x) (x & (-x))
17 #define ll long long
18 #define MAX 10000000
19 map<ll, bool> win;
20 map<ll, ll> ans;
21 ll q;
22
23 bool dfs(ll x) {
24 if(win.find(x) == win.end()) {
25 bool isprime = true, WIN = false;
26 ans[x] = 0;
27 for(ll i = 2; i * i <= x && !WIN; i++) {
28 if(x % i == 0) {
29 isprime = false;
30 if(!dfs(i)) WIN = true, ans[x] = i;
31 if(WIN) break;
32 if(!dfs(x / i)) WIN = true, ans[x] = x / i;
33 }
34 }
35 win[x] = WIN || isprime;
36 }
37 return win[x];
38 }
39
40 int main() {
41 ans.clear(), win.clear();
42 while(cin >> q) {
43 if(dfs(q)) cout << 1 << endl << ans[q] << endl;
44 else cout << 2 << endl;
45 }
46 return 0;
47 }
48
3.鐩擱偦鐨勬嫭鍙蜂笉鑳芥煋鐩稿悓鐨勯鑹層?br /> 闂紝婊¤凍浠ヤ笂涓変釜鏉′歡鐨勬煋鑹叉柟妗堟湁澶氬皯縐嶃?br />
銆愰瑙c戯細濂芥槑鏄劇殑dp棰橈紝鍥犱負涓鑸繖縐嶆眰鏂規鏁扮殑棰樼洰濡傛灉鐢ㄧ函鏁板鐭ヨ瘑鏉ヨВ鏄В涓嶅嚭鐨勶紝鑰屼笖闄愬埗鏉′歡涓澶у爢銆?br /> 璁劇姸鎬乨p[l][r][c1][c2]琛ㄧず[l,r]涔嬮棿涓攍鏌撴垚c1,r鏌撴垚c2鐨勫悎娉曟柟妗堟暟銆?br /> 鐒跺悗杞Щ瑕佸垎涓ょ鎯呭喌璁ㄨ錛?.l涓巖鍖歸厤錛?.l涓巖涓嶅尮閰?br /> 杞Щ灝辨槸榪愮敤涔樻硶鍘熺悊錛岃鍏堥澶勭悊鎷彿鐨勫尮閰嶆儏鍐點?br />
銆愪唬鐮併戯細
2 #include "cstdio"
3 #include "cstring"
4 #include "algorithm"
5 #include "vector"
6 #include "queue"
7 #include "cmath"
8 #include "string"
9 #include "cctype"
10 #include "map"
11 #include "iomanip"
12 #include "stack"
13 using namespace std;
14 #define pb push_back
15 #define lc(x) (x << 1)
16 #define rc(x) (x << 1 | 1)
17 #define lowbit(x) (x & (-x))
18 #define ll long long
19 #define MAX 710
20 const int MOD = 1000000007;
21 string str;
22 ll dp[MAX][MAX][3][3];
23 int mat[MAX];
24 int s[MAX], top;
25
26 void pretreatment() {
27 top = 0;
28 for(int i = 0; i < str.length(); i++) {
29 if(str[i] == '(') s[top++] = i;
30 else mat[s[--top]] = i;
31 }
32 }
33
34 bool check(int a, int b) {
35 if(a == 0 || b == 0 || a != b) return true;
36 return false;
37 }
38
39 ll func(int l, int r, int c1, int c2) {
40 if(dp[l][r][c1][c2] != -1) return dp[l][r][c1][c2];
41 ll res = 0;
42 if(mat[l] == r) {
43 if((c1 == 0) ^ (c2 == 0)) {
44 if(l + 1 == r) return dp[l][r][c1][c2] = 1;
45 for(int i = 0; i < 3; i++) {
46 for(int j = 0; j < 3; j++) {
47 if(check(c1, i) && check(j, c2)) {
48 res += func(l + 1, r - 1, i, j);
49 }
50 }
51 }
52 } else return dp[l][r][c1][c2] = 0;
53 } else {
54 for(int i = 0; i < 3; i++) {
55 for(int j = 0; j < 3; j++) {
56 if(check(i, j))
57 res += func(l, mat[l], c1, i) * func(mat[l] + 1, r, j, c2);
58 }
59 }
60 }
61 return dp[l][r][c1][c2] = res % MOD;
62 }
63
64 int main() {
65 while(cin >> str) {
66 pretreatment();
67 memset(dp, -1, sizeof(dp));
68 ll ans = 0;
69 for(int i = 0; i < 3; i++)
70 for(int j = 0; j < 3; j++)
71 ans += func(0, str.length() - 1, i, j);
72 cout << ans % MOD << endl;
73 }
74 return 0;
75 }
76
銆愰瑙c戯細濂芥槑鏄劇殑姒傜巼dp錛屾瘮璧涙椂灞呯劧涓嶅鑳嗗紑錛屾檿浜嗭紝姘村鉤榪樻槸涓嶅銆?br /> 浠婂ぉ璁ょ湡鎯充簡涓涓嬶紝鍙戠幇鏄緢綆鍗曠殑姒傜巼dp錛屼簭浜嗐?br /> 璁緁[i][j] 琛ㄧず褰撳墠琚嬪瓙鏈?i 鍙櫧榧犲拰 j 鍙粦榧狅紝鍏富鎽稿畬鍚庤儨鍑虹殑鏈虹巼銆?br /> g[i][j] 琛ㄧず褰撳墠琚嬪瓙鏈?i 鍙櫧榧犲拰 j 鍙粧榧狅紝榫欐懜瀹屽悗鑳滃嚭鐨勬満鐜囥?br />
鐘舵佽漿縐?
f[i][j] = i / (i + j) + j * (1 - g[i][j-1]) / (i + j);
g[i][j] = i / (i + j) + j / (i + j) * (i / (i + j - 1) * (1 - f[i-1][j-1]) + (j - 1) / (i + j - 1) * (1 - f[i][j-2]));
閫掓帹涓嬈?O(n*n), 絳旀鍗充負f[w][b].
銆愪唬鐮併戯細
2 #include "cstdio"
3 #include "cstring"
4 #include "algorithm"
5 #include "vector"
6 #include "queue"
7 #include "cmath"
8 #include "string"
9 #include "cctype"
10 #include "map"
11 #include "iomanip"
12 using namespace std;
13 #define pb push_back
14 #define lc(x) (x << 1)
15 #define rc(x) (x << 1 | 1)
16 #define lowbit(x) (x & (-x))
17 #define ll long long
18 #define MAX 1005
19 int w, b;
20 double f[MAX][MAX], g[MAX][MAX];
21 int main() {
22 while(cin >> w >> b) {
23 for(int i = 0; i <= b; i++) f[0][i] = 0.0, g[0][i] = 1.0;
24 for(int i = 1; i <= w; i++) f[i][0] = g[i][0] = 1.0;
25 for(int i = 1; i <= w; i++) {
26 for(int j = 1; j <= b; j++) {
27 double tmp = 0.0;
28 f[i][j] = 1.0 * i / (i + j) + 1.0 * j * (1 - g[i][j-1]) / (i + j);
29 if(j >= 2) tmp = 1.0 * (j - 1) / (i + j - 1) * (1 - f[i][j-2]);
30 g[i][j] = 1.0 * i / (i + j) + 1.0 * j * (i * (1 - f[i-1][j-1]) / (i + j - 1) + tmp) / (i + j);
31 }
32 }
33 printf("%.10f\n", f[w][b]);
34 }
35 return 0;
36 }
37
銆愰瑙c戯細鍏堟妸lucky number紱繪暎鍖栵紝鐒跺悗瀵筶ucky number榪涜dp銆?br /> 璁綿p[i][j]琛ㄧず鍓?i 縐峫ucky number閫変簡 j 縐嶇殑鏂規鏁般?br /> dp[i][j] = dp[i-1][j] + dp[i-1][j-1] * c[i],鍏朵腑c[i]琛ㄧず絎?i 縐峫ucky number鐨勪釜鏁般?br /> 鐒跺悗ans = ∑C(cnt, i) * dp[luckycnt][k-i], cnt 涓洪潪lucky number鏁扮洰錛宭uckycnt 涓簂ucky number 縐嶇被鏁般?br /> 娉ㄦ剰錛岀粍鍚堟暟闇瑕佺敤閫嗗厓澶勭悊銆?br />
銆愪唬鐮併戯細
2 #include "cstdio"
3 #include "cstring"
4 #include "algorithm"
5 #include "vector"
6 #include "queue"
7 #include "cmath"
8 #include "string"
9 #include "cctype"
10 #include "map"
11 using namespace std;
12 #define pb push_back
13 #define lc(x) (x << 1)
14 #define rc(x) (x << 1 | 1)
15 #define lowbit(x) (x & (-x))
16 #define ll long long
17 #define maxn 100050
18 const ll MOD = 1000000007LL;
19 map<int, int> mp;
20 int n, k;
21 int luckycnt, cnt;
22 ll dp[1500], c[1500], p[maxn];
23
24 void init() {
25 memset(c, 0, sizeof(c));
26 luckycnt = cnt = 0;
27 mp.clear();
28 }
29
30 bool check(int x) {
31 while(x) {
32 if(x % 10 != 4 && x % 10 != 7) return false;
33 x /= 10;
34 }
35 return true;
36 }
37
38 void Gcd(ll a, ll b, ll &d, ll &x, ll &y) {
39 if (!b) {
40 d = a, x = 1, y = 0;
41 return;
42 }
43 Gcd(b, a % b, d, y, x);
44 y -= x * (a / b);
45 }
46
47 ll inv(ll a, ll n) {
48 ll d, x, y;
49 Gcd(a, n, d, x, y);
50 if (d == 1) return (x % n + n) % n;
51 else return -1;
52 }
53
54 ll C(ll n, ll m) {
55 if(m == 0) return 1;
56 if(m > n) return 0;
57 ll res = (p[n] * inv(p[m], MOD)) % MOD;
58 res = (res * inv(p[n-m], MOD)) % MOD;
59 return res;
60 }
61
62 void solve() {
63 memset(dp, 0, sizeof(dp));
64 dp[0] = 1;
65 for(int i = 1; i <= luckycnt; i++)
66 for(int j = i; j; j--)
67 dp[j] = (dp[j] + dp[j-1] * c[i]) % MOD;
68 ll ans = 0;
69 for(int i = 0; i <= k && i <= cnt; i++) {
70 if(k - i > luckycnt) continue;
71 ans = (ans + C(cnt, i) * dp[k-i]) % MOD;
72 }
73 cout << ans << endl;
74 }
75
76 int main() {
77 p[0] = 1;
78 for(int i = 1; i < maxn; i++) p[i] = (p[i-1] * i) % MOD;
79 while(cin >> n >> k) {
80 init();
81 for(int i = 0, val; i < n; i++) {
82 cin >> val;
83 if(check(val)) {
84 if(mp.find(val) == mp.end()) mp[val] = ++luckycnt;
85 c[mp[val]]++;
86 } else cnt++;
87 }
88 solve();
89 }
90 return 0;
91 }
92