原題鏈結
用了個搜尋
兩個剪枝
明顯在數字固定的地方
就不要列舉了
然後 如果這個數
只可能在這個位置用上
那就只能用這個數了
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define mod 1000000007
#define ll long long
using
namespace
std;
int n,m,k,t,ans,a[25],x,y,use[25];
void dfs(int p)
if(a[p]) dfs(p+1);
else
for(i=max(p-k,1);i<=min(p+k,n);i++)
if(!use[i])
}}int main()
dfs(1);
printf("%d\n",ans);
}return
0;}
還有乙個30分的dp
[理論上是]50分的複雜度
利用狀態壓縮
乙個n位的二進位制數
1表示這個位用過
0表示沒用過
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define mod 1000000007
#define ll long long
using
namespace
std;
int paji[5]=,t,n,m,k,p,a[25],dp[2000005],d,x,y;
void work()
else}}
printf("%d\n",dp[p-1]);
}int main()
if(k==0) printf("1\n");
else work();
}return
0;}
P4876 近似排列計數50
時間限制 1s 記憶體限制 256mb 問題描述 對於乙個1 n的排列,如果滿足第i個數 ai i k,則稱該排列為k 近似排列。現在排列的若干位置已經確定,你需要計算剩下的數有多少種排列方法使得形成的排列是k 近似排列。輸入 輸入檔名為count.in。第一行乙個數t 10 表示資料組數 對於每一...
排列計數(dp)
主要題意就是給你乙個排列組合,要輸出指定ai i的個數輸出符合的排列組合與1000000007取模個數。input there are several test cases,and one line for each case,which contains two integers,n and k....
Perm排列計數
記憶體限制 512 mib 時間限制 1000 ms 標準輸入輸出 題目描述 稱乙個1,2,n的排列p1,p2.pn是magic的,當且僅當2 i n時,pi pi 2.計算1,2,n的排列中有多少是magic的,答案可能很大,只能輸出模p以後的值 輸入格式 輸入檔案的第一行包含兩個整數 n和p,含...