題意:是中文題。
題解:很顯然要設dp[i][j]表示,i個數有j個逆序對有幾種然後就是狀態的轉移,
dp[i][j]=dp[i-1][max(0,j-(i-1)]+.....+dp[i-1][max(j,(i-1)*(i-2)/2];
還會用到字首和,還有注意最後結果加mod再膜mod,結果可能會負數。
#include #include #include #include #define mod 1000000007using namespace std;
typedef long long ll;
int sum[1000000] , dp[1010][30010];
int main()
else
else
dp[i][j] = dp[i][j] % mod;}}
for(int j = 0 ; j <= i * (i - 1) / 2 && j <= 30000 ; j++)
}scanf("%d" , &t);
while(t--)
return 0;
}
51Nod 1020 逆序排列(DP)
題目鏈結 題目描述 在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序數是4。1 n的全排列中,逆序數最小為0 正序 最大為n n 1 2 倒序 ...
51nod1020 逆序排列 dp
基準時間限制 2 秒 空間限制 131072 kb 分值 80 在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序數是4。1 n的全排列中,逆序數...
51nod 1020 逆序排列
原題鏈結 1020 逆序排列 基準時間限制 2 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。如2 4 3 1中,2 1,4 3,4 1,...