队测 逆序对 permut
本人水平有限,题解不到为处,请多多谅解
本蒟蒻谢谢大家观看
题目:
#include<bits/stdc++.h> #pragma GCC optimize(3) #define mod 10000 using namespace std; int n,a[13],ans,cnt,t,k; int f[1001][20002]; bool b[13]; void inint(){freopen("permut.in","r",stdin);freopen("permut.out","w",stdout); } void dfs(int num){if(num==n+1){cnt=0;//cnt每次做完一次排列后要清零,从重新统计 for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){if(a[i]>a[j]&&j>i)cnt++; }//cout<<a[i]<<" ";//" cnt= "<<cnt<<" "; }//cout<<endl;if(cnt==k)ans++;//cout<<endl;//cout<<ans<<endl;return ;} // cout<<ans<<endl;for(int i=1;i<=n;i++){if(b[i]==false){b[i]=true;a[num]=i;dfs(num+1);b[i]=0;a[num]=0;}}return ; } inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch<='9'&&ch>='0'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f; } int main() {//inint();t=read();while(t--){ans=0;n=read(),k=read();dfs(1);printf("%d\n",ans);} return 0; }
同理:ans一定要不断的重新清零。
显然解法1会TLE,当n==10是其已经不能胜任在1s内跑完。
这时,通过dfs我们可以输入几个数,发现可以使用DP(dfs在一定有规律时可以转化成DP)
解法2横空出世:设f[i][j]表示1~i的逆序对数为j的排列方案数。次设法刚好符合题意,我们就可以直接输出f[n][k]即可。
在任意一个1到i-1排列中插入i可能产生0,1,2……i-1个逆序对。
i-1
f[i][j]=∑f[i-1][j-k](j>=k)
k=0
#include<bits/stdc++.h> #pragma GCC optimize(3) using namespace std; int f[5001][4951],n[11],k[11],t,maxn,maxk; inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch<='9'&&ch>='0'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f; } int main() {t=read();for(int i=1;i<=t;i++){n[i]=read(),k[i]=read();maxn=max(maxn,n[i]);maxk=max(maxk,k[i]);}f[0][0]=1;f[1][0]=1;f[2][0]=1;f[2][1]=1;for(int i=3;i<=maxn;i++){for(int j=0;j<=maxk;j++){for(int kk=0;kk<=i-1&&kk<=j;kk++){f[i][j]=(f[i][j]+f[i-1][j-kk])%10000;}}}for(int i=1;i<=t;i++)printf("%d\n",f[n[i]][k[i]]); }
转载于:https://www.cnblogs.com/nlyzl/p/11352534.html
队测 逆序对 permut相关推荐
- Bzoj 3289: Mato的文件管理 莫队,树状数组,逆序对,离散化,分块
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MB Submit: 1539 Solved: 665 [Submit][Status][ ...
- 队内胡策 2017.10.24 求逆序对+表达式计算+贪心+Bfs+最短路、exgcd
*PS:为什么我t5死活都调不出来呢(눈‸눈) T1:原创,参考noip火柴排队. T2: codevs 2178 表达式运算Cuties (我自己找的) T3:Codeforce867E(865D) ...
- 剑指Offer - 面试题51. 数组中的逆序对(归并排序,求逆序对)
1. 题目 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 示例 1: 输入: [7,5,6,4] 输出: 5限制: 0 ...
- 算法笔记【归并排序】:逆序对
Problem F. Ricky队形 时间限制 1000 ms 内存限制 256 MB 题目描述 Ricky班里有n(2<=n<=100000)个人,每个人有一个学号ai(1<=ai ...
- 1164: 分治 逆序对
1164: 分治 逆序对 时间限制: 1 Sec 内存限制: 128 MB 题目描述 给一列数a1,a2,...,an,求它的逆序对数,即有多少个有序对(i,j),使得i<j且ai>aj ...
- 【2018.12.15】【考试总结】【模拟+逆序对+树状数组+贪心+multiset】爆零之旅
这是我悲惨的接近爆零的一次考试,但是本蒟蒻不能放弃,还是要总结的QAQ 答题卡 [题目背景] 八月是个悲惨的月份.先不谈炎热的天气,对于新生来说,八月意味着军训: 而对于高二高三的同学来说,八月意味着 ...
- 【逆序对】Ultra - Quicksort
POJ 2299 Ultra-QuickSort 只允许交换,比较相邻的元素, 求最少多少次交换可以使得序列有序 冒泡排序的次数-->数列中逆序对的个数减1-->最终为0 -->答案 ...
- UVA 11990 ``Dynamic'' Inversion 动态逆序对
``Dynamic'' Inversion Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://uva.onlinejudge.org/index ...
- 期望dp ---- B. Tree Array 思维+期望dp 逆序对期望数
题目大意 题目大意: n(n≤200)n(n\leq200)n(n≤200)个节点的树.初始的时候,等概率随机选择一个点标记,接来随机选择一个与标记点相连的未标记点来标记,直到所有的点都被标记.根据点 ...
最新文章
- Cisco ***学习笔记--第二天
- 我放弃了年薪200万的岗位,因为“复制粘贴”的技术活让人厌恶
- 第五章 Python数据结构
- vscode怎么设置默认浏览器?(不成功)
- 第03课:Anaconda 与 Jupyter Notebook
- 无参考质量评估在视频增强的进展与应用
- Spring-Cloud 学习笔记-(4)负载均衡器Ribbon
- 6-14 数据库高级
- 使用XAMPP和Hbuilder搭建PHP环境(XAMPP中Apache启动失败解决方法)
- pythonweb静态服务器_python实现外部静态服务器,浏览器通过HTTP与之通信2
- Tengine编译安装+lua+sticky模块
- springboot 集成redis实现session共享
- 用c语言判断计算机是大端模式还是小端模式
- 芯片AD库转换之贸泽 Library Loader使用
- 【07】processing-字体(中文)
- Android请求麦克风权限+系统权限页面回调
- 机器学习/深度学习算法学习心得
- 优雅写代码的45个小技巧
- C语言:利用指针编写程序,用梯形法计算给定的定积分
- C语言消消乐游戏代码