銆岄瑙c€岮T4515 [AGC030F] Permutation and Minimum

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了銆岄瑙c€岮T4515 [AGC030F] Permutation and Minimum相关的知识,希望对你有一定的参考价值。

鏍囩锛?a href='http://www.mamicode.com/so/1/%e4%bb%a3%e7%a0%81' title='浠g爜'>浠g爜   杞Щ   include   缁熻   ==   閾炬帴   搴忓垪   涓嶅悓   use   

棰樼洰閾炬帴

瀛I浠ユ潵鐨勭涓€閬撻粦棰橈紝鍏堝湪杩欓噷绁竴涓嬨€?/p>

  • 绗竴閬撻粦棰樼キ

浜庢槸灏辨墦绠楁潵鍐欓瑙c€?/p>

棰橀潰澶ф剰

鏈変竴涓?(2N) 涓暟鐨勫簭鍒?(A)锛屼粠 (1) 鍒?(2N) 鏍囧彿銆備綘瑕佹妸 (1 sim 2N) 杩欎簺鏁板~杩涘幓锛屼娇瀹冨舰鎴愪竴涓帓鍒椼€?/p>

浣嗘槸宸茬粡鏈変竴浜涗綅缃己鍒跺~浜嗙壒瀹氱殑鏁颁簡锛岃緭鍏ユ椂浼氱粰鍑恒€?/p>

鏈€鍚庝护闀垮害涓?(N) 鐨勫簭鍒?(B) 涓猴細浠?(B_i = min{A_{2 i - 1}, A_{2 i}})銆?/p>

璇㈤棶鎵€鏈夋柟妗堜腑鑳藉緱鍒扮殑涓嶅悓鐨?(B) 鐨勬暟閲忋€?/p>

(1 le N le 300)銆?/p>

鎬濊矾

鎴戜滑瑕佹眰涓€涓暱搴︿负 (N) 鐨勫簭鍒?(B)锛岀劧鍚庢槸搴忓垪 (A) 涓殑鏁颁袱涓ら厤瀵逛腑鐨勬渶灏忓€硷紝鎴戜滑鍏堣€冭檻鎶婁粬鍙樻垚鏈夊簭鐨勶紝鐒跺悗浠庡ぇ鍒板皬鏉ョ粺璁★紝鍥犱负濡傛灉浠庡皬鍒板ぇ鐨勮瘽鎴戜滑鍙兘浼氬宸茬粡缁熻杩囩殑鏁板瓧杩涜鍐嶆缁熻锛屽鑷寸瓟妗堝亸澶э紝鐒跺悗鍥犱负鏁板瓧澶у皬鏄皬浜庣瓑浜?600 鐨勶紝鎵€浠ユ垜浠彲浠ョ洿鎺ヤ笂妗舵潵鎼炪€?/p>

棣栧厛瀵逛簬 (A_{2i-1}) 鍜?(A_{2i}) 閮藉凡缁忕粰鍑虹殑鏁板鑲畾鏄笉浼氬绛旀浣滃嚭璐$尞鐨勶紝鎵€浠ユ垜浠爣璁颁竴涓嬶紝鍦ㄤ箣鍚庣粺璁$殑鏃跺€欎笉璁″叆绛旀涓紝鎵€浠ュ绛旀鑳戒綔鍑鸿础鐚殑鑲畾鏄鍚?锛?-1 , x ) 涓?锛?-1 , -1 锛夌殑褰㈠紡锛屾垜浠О鍓嶈€呬负褰㈠紡 1 锛?鍚庤€呬负褰㈠紡 2 銆傚浜庡悗鑰呮垜浠槸鑳藉闅忔剰鍙樻崲椤哄簭鐨勶紝鎵€浠ユ垜浠氨鍙互缁熻鏁伴噺鐒跺悗鏈€鍚庡绛旀涔樹笂杩欎釜鏁伴噺鐨勯樁涔樸€?/p>

鏄剧劧杩欐槸涓€涓鏁?DP 锛屾垜浠€冭檻濡備綍 DP銆?/p>

璁句竴涓姸鎬?(f_{i,j,k}) 琛ㄧず鎴戜滑宸茬粡缁熻鍒颁簡绗?(i) 涓暟锛岃繕鍓╀笅 (j) 瀵规垜浠凡缁忓~浜嗕竴涓暟鐨勫舰寮?2 鐨勬暟瀵癸紝 杩樻湁 (k) 瀵规病鏈夊~鐨勫舰寮?1 鐨勬暟瀵广€?/p>

閭d箞瀵逛簬褰㈠紡 1 锛屽拰褰㈠紡 2 鐨勬暟瀵癸紝鎴戜滑鍏堥澶勭悊鍑轰粬浠垎鍒湁澶氬皯涓€傜劧鍚庡啀灏嗗叾鏀惧叆涓€涓暟缁勪腑鏂逛究鏌ヨ鍒板簳鏄摢涓€绉嶃€?/p>

棣栧厛瀵逛簬涓€涓凡缁忓瓨鍦ㄤ笌褰㈠紡 1 鐨勬暟瀵逛腑鐨勬暟锛屾垜浠彲浠ュ~鎴栬€呬笉濉紝濡傛灉涓嶅~閭d箞鎴戜滑灏变細浠?(f_{i - 1, j, k}) 杞Щ鍒?(f_{i, j, k + 1}) 锛屽鏋滃~鐨勮瘽锛?鎴戜滑蹇呮媺涓€涓凡缁忓~浜嗕竴鍗婄殑褰㈠紡 2 鐨勬暟瀵硅繃鏉ユ嫾鎴愪竴涓畬鏁寸殑鏁板锛屾墍浠ヨ繖鏃?(j > 0) 锛岀劧鍚庢垜浠氨浼氫粠 (f_{i - 1, j ,k}) 杞Щ鍒?(f_{i, j - 1, k}) 銆?/p>

鐒跺悗灏辨槸瀵逛簬鍓╀笅鐨勬暟锛屼粬浠槸鑷敱鏁帮紝棣栧厛浠栦滑鍙互濉叆涓€涓┖鐨勬暟瀵癸紝閭d箞灏变細浠?(f_{i - 1, j, k}) 杞Щ鑷?(f_{i, j + 1, k}), 鍏舵鍙互濉叆涓€涓凡缁忓畬鎴愪簡涓€鍗婄殑褰㈠紡 2 鐨勬暟瀵癸紝姝ゆ椂 (j > 0) 锛岄偅涔堝氨浼氫粠 (f_{i - 1,j,k}) 杞Щ鑷?(f_{i , j-1, k}), 鏈€鍚庤繕鍙互濉叆涓€涓舰寮?1 鐨勬暟瀵癸紝涓旀鏃?(k > 0)锛岄偅涔堝氨浼氫粠 (f_{i - 1,j,k}) 杞Щ鑷?(f_{i, j, k - 1}) 锛屽張鍥犱负褰㈠紡 1 鐨勬暟瀵圭殑浣嶇疆鏄浐瀹氱殑锛?鑰屾鏃跺張鏈?(k) 涓褰㈠紡鐨勬暟瀵癸紝鎵€浠ユ垜浠湁 (k) 绉嶅~娉曪紝闇€瑕佸 (f_{i - 1, j , k} imes k) 鍚庤浆绉汇€?/p>

杈圭晫涓?(f _ {0 ,0 ,0} = 1) 锛屾敞鎰忓彇妯?/p>

涓嬩负浠g爜

#include <bits/stdc++.h>
using namespace std;
#define R register int
const int N = 300 + 10, mod = 1e9 + 7;
int f[N << 1][N][N], a[N << 1], cnt = 0, tot = 0;
int num = 0, b[N << 1];
bool vis[N << 1], use[N << 1];
signed main()  {
    int n; scanf("%d", &n);
    for(R i = 1; i <= n; i ++) {
        int y = i << 1, x = y - 1;
        scanf("%d%d", &a[x], &a[y]);
        if(a[x] == -1 && a[y] == -1) cnt ++; //瀵瑰舰寮?2 鐨勬暟瀵硅繘琛岀粺璁?        else if(a[x] > 0 && a[y] > 0) vis[a[x]] = vis[a[y]] = true; //濡傛灉涓や釜鏁伴兘宸茬粡纭畾鍒欐墦涓婃爣璁?        else {
            tot ++; 
            if(a[x] == -1) use[a[y]] = true;
            else use[a[x]] = true;
        }//瀵逛簬褰㈠紡 1 鐨勬暟瀵硅繘琛岀粺璁★紝骞朵笖缁熻鍑鸿繖绉嶆暟瀵逛腑涓嶄负 -1 鐨勬暟鏄摢浜?    }
    int n2 = 0; f[0][0][0] = 1; n <<= 1;
    for(R i = n; i >= 1; i --)
        if(!vis[i]) b[++ n2] = i;
    //灏嗕細瀵圭瓟妗堜綔鍑鸿础鐚殑鏁拌繘琛屼粠澶у埌灏忕殑鎺掑簭锛?    for(R i = 1; i <= n2; i ++)
        for(R j = 0; j <= cnt + tot; j ++) //鑷敱鏁拌兘濉叆鎵€鏈変細瀵圭瓟妗堥€犳垚璐$尞鐨勬暟
            for(R k = 0; k <= tot; k ++) {
                if(use[b[i]]) {
                    f[i][j][k + 1] = (f[i][j][k + 1] + f[i - 1][j][k]) % mod;
                    if(j > 0) f[i][j - 1][k] = (f[i - 1][j][k] + f[i][j - 1][k]) % mod;
                }
                else {
                    f[i][j + 1][k] += (f[i - 1][j][k] + f[i][j + 1][k]) % mod;
                    if(j > 0) f[i][j - 1][k] = (f[i - 1][j][k] + f[i][j - 1][k]) % mod;
                    if(k > 0) f[i][j][k - 1] = (f[i][j][k - 1] + 1ll * f[i - 1][j][k] * k % mod) % mod;
                }
            }

    int ans = f[n2][0][0]; 
    for(R i = 1; i <= cnt; i ++) ans = (1ll * ans * i)  % mod;// 涔樹笂褰㈠锛?-1 , -1 锛夌殑鏁板鐨勯樁涔?    printf("%d
", ans);
    return 0;
}

以上是关于銆岄瑙c€岮T4515 [AGC030F] Permutation and Minimum的主要内容,如果未能解决你的问题,请参考以下文章

viewport銆佸竷灞€瑙嗗彛銆佽瑙夎鍙c€佺悊鎯宠鍙?娣卞叆鐞嗚В

銆岄潰璇曞繀闂€峫eetcode楂橀棰樼簿閫?/a>

stm32f030f4p6 i2c地址是多少?

STM32F030F4 BLDC

STM32F030F4 之ADC使用