BZOJ 2431 [HAOI2009]逆序对数列:dp 逆序对
2024-08-29 07:11:10
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2431
题意:
给定n,k,问你有多少个由1~n组成的排列,使得逆序对个数恰好为k个。
题解:
表示状态:
dp[i][j] = num of sequences
i:已经用了1~i之间的数(在这一步放了数字i)
j:逆序对个数为j
找出答案:
ans = dp[n][k]
如何转移:
在当前这一步要放数字i。
所以要将i插入一个由1~i-1组成的排列中。
若将i插入位置x(0 <= x <= i-1),则新添的逆序对个数为x。
所以:
dp[i][j] = ∑ dp[i-1][j-x]
即:
dp[i][j] = ∑ dp[i-1][j-i+1 to j]
由于裸dp复杂度为O(N^3) = O(10^9),所以加一个前缀和优化。
边界条件:
dp[1][0] = 1
others = 0
AC Code:
// state expression:
// dp[i][j] = num of sequences
// i: considered number i
// j: there is j inversion pairs
//
// find the answer:
// ans = dp[n][k]
//
// transferring:
// dp[i][j] = sigma dp[i-1][j-i+1 to j]
//
// boundary:
// dp[1][0] = 1
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 1005
#define MAX_K 1005
#define MOD 10000 using namespace std; int n,t;
int dp[MAX_N][MAX_K];
int sum[MAX_N][MAX_K]; void read()
{
cin>>n>>t;
} void update_sum(int i,int j,int a)
{
if(j==) sum[i][j]=a;
else sum[i][j]=(sum[i][j-]+a)%MOD;
} int query_sum(int i,int x,int y)
{
if(x==) return sum[i][y];
else return ((sum[i][y]-sum[i][x-])%MOD+MOD)%MOD;
} void solve()
{
memset(dp,,sizeof(dp));
memset(sum,,sizeof(sum));
dp[][]=;
for(int i=;i<=t;i++)
{
sum[][i]=;
}
for(int i=;i<=n;i++)
{
for(int j=;j<=t;j++)
{
dp[i][j]=query_sum(i-,max(,j-i+),j);
update_sum(i,j,dp[i][j]);
}
}
} void print()
{
cout<<dp[n][t]<<endl;
} int main()
{
read();
solve();
print();
}
最新文章
- git客服端基本操作
- C++中const关键字的使用总结
- Hibernate的延迟加载
- linux gdb 没有符号表被读取。请使用 ";file"; 命令。
- 【leetcode】13. Roman to Integer
- 【转】科普Spark,Spark是什么,如何使用Spark
- Webx之表单验证
- 求帮看!!!!BZOJ 1014 [JSOI2008]火星人prefix
- shell script中的$*和$@
- activity的生命周期【转】
- 分享:json2.js源代码解读笔记
- poj_3461: Oulipo
- 学习React系列(五)——使性能最优
- OpenCV 1 图像分割--分水岭算法代码
- 使用bootstrap-select有时显示“Nothing selected”
- 6 个开源的家庭自己主动化工具 | Linux 中国
- Ch05 类 - 练习
- <;操作系统>;进程和线程
- react中跨域请求天气预报接口数据
- VMware虚拟机上配置nginx后,本机无法访问问题
热门文章
- Linux_经常使用命令
- HDFS源码分析之FSImage文件内容(一)总体格式
- 【Mac系统】之Mysql数据库遇到修改数字密码的问题(SQL语法错误:ERROR 1064 (42000),密码策略等问题:ERROR 1819 (HY000))
- 【安装.net framework4.0】之安装失败,“安装时发生严重错误”
- 嵌入式开发之davinci--- 8127 中osd yuv 数据分析
- ftp put get 的使用方法
- 在ListView的GroupItem头中显示每列的Summary
- 转载 OS js oc相互调用(JavaScriptCore) ---js调用iOS ---js里面直接调用方法
- Lumen开发:简单实现auth用户认证
- kubernetes高级之集群中使用sysctls