對於乙個數列,如果有iaj,那麼我們稱ai與aj為一對逆序對數。若對於任意乙個由1~n自然數組成的數列,可以很容易求出有多少個逆序對數。那麼逆序對數為k的這樣自然數數列到底有多少個?
輸入格式:
第一行為兩個整數n,k。
輸出格式:
寫入乙個整數,表示符合條件的數列個數,由於這個數可能很大,你只需輸出該數對10000求餘數後的結果。
輸入樣例#1:
4 1
輸出樣例#1:
3
樣例說明:
下列3個數列逆序對數都為1;分別是1 2 4 3 ;1 3 2 4 ;2 1 3 4;
測試資料範圍
30%的資料 n<=12
100%的資料 n<=1000,k<=1000
一道簡單題,但我覺得可以做到更大的資料,比方說加兩個0
從小到大考慮每一位,先考慮1,如果1位於i這個位置,那1與1~i-1這些位置的每乙個數都會產生乙個逆序對,與i+1~n這些位置的數都不會產生逆序對,至於具體每個數字是什麼對於1的貢獻沒有影響
然後從排列裡把1去掉,變成乙個2~n的排列,這個排列與1~n-1的排列是等價的,於是問題轉化成了乙個較小的問題
然後可以dp
dp[i][j]表示1~i的排列,要有j個逆序對的方法數,列舉當前位置產生的逆序對來轉移,這個東西本來是nk^2的,但是發現乙個位置轉移的時候是連續的一段,用字首和優化去掉乙個k即可
其實這個問題等價於有n個帶編號的盒子排成一列,一共放k個球,標號為i的盒子裡不能放超過i-1個球,求方法總數,這應該是有更好的做法的
upd1:這個東西的生成函式是 $ (1)(1+x)(1+x+x^2)(1+x+x^2+x^3)...(1+x+x^2+...+x^) $ 即 $ \prod_^\sum_^x^q $ ,這個形式過於美妙讓人很難不認為它有乙個優美的通解
1 #include 2 #include 3 #include 4 #include 5 #include6 #include 7 #include 8 #include 9 #include 10 #include
11 #include 12 #include 13 #include 14
#define eps 1e-7
15#define inf 0x3f3f3f3f
16#define mod 10000
17#define rep0(j,n) for(int j=0;j18
#define rep1(j,n) for(int j=1;j<=n;++j)
19#define pb push_back
20#define mp make_pair
21#define set0(n) memset(n,0,sizeof(n))
22#define ll long long
23#define ull unsigned long long
24#define iter(i,v) for(edge *i=head[v];i;i=i->nxt)
25#define max(a,b) (a>b?a:b)
26#define min(a,b) (a27
#define print_runtime printf("running time:%.3lfs\n",double(clock())/1000.0)
28#define to(j) printf(#j": %d\n",j);
29//
#define oj
30using
namespace
std;
31const
int maxint = 100010;32
const
int maxnode = 100010;33
const
int maxedge = 2*maxnode;
34char buf,*buf;
35int
read()
38while(isdigit(c))
39return f*x;40}
41char
get_ch()
46//
------------------- head files ----------------------
//47
48int
n,k;
49int dp[10010],sum[10010
];50
void
get_input();
51void
work();
52int
main()
57void
work()
63 sum[0]=dp[0
];64
rep1(j,k)67}
68 printf("
%d\n
",(dp[k]+mod)%mod);69}
70void
get_input()
P2513 HAOI2009 逆序對數列
題目描述 對於乙個數列,如果有iaj,那麼我們稱ai與aj為一對逆序對數。若對於任意乙個由1 n自然數組成的數列,可以很容易求出有多少個逆序對數。那麼逆序對數為k的這樣自然數數列到底有多少個?錯誤日誌 沒想対,菜是原罪,最近狀態不佳 在一段 1 i 1 的排列中加入 i 你可以控制 i 插入的位置,...
P2513 HAOI2009 逆序對數列
對於乙個數列,如果有iaj,那麼我們稱ai與aj為一對逆序對數。若對於任意乙個由1 n自然數組成的數列,可以很容易求出有多少個逆序對數。那麼逆序對數為k的這樣自然數數列到底有多少個?輸入格式 第一行為兩個整數n,k。輸出格式 寫入乙個整數,表示符合條件的數列個數,由於這個數可能很大,你只需輸出該數對...
P2513 HAOI2009 逆序對數列
對於乙個數列,如果有iaj,那麼我們稱ai與aj為一對逆序對數。若對於任意乙個由1 n自然數組成的數列,可以很容易求出有多少個逆序對數。那麼逆序對數為k的這樣自然數數列到底有多少個?輸入格式 第一行為兩個整數n,k。輸出格式 寫入乙個整數,表示符合條件的數列個數,由於這個數可能很大,你只需輸出該數對...