加强 廉政网站建设,常州网站建设智博,营销网店推广的软文,家教辅导培训网站建设思路#xff1a;
1. 此题考查的冒泡排序中的交换次数#xff0c;其实就是考察当前数与后面的逆序对个数问题。而为了最大利用位数#xff0c;应当使每一位都不小于后面的字符#xff0c;否则会造成一次逆序对的浪费#xff08;贪心#xff0c;为了使总位数最少#xff…
思路
1. 此题考查的冒泡排序中的交换次数其实就是考察当前数与后面的逆序对个数问题。而为了最大利用位数应当使每一位都不小于后面的字符否则会造成一次逆序对的浪费贪心为了使总位数最少。
2. 通过上面的思路可以得知每一个不同长度的最大逆序对数量一定是由严格递减的字符串组成。而如果要获得逆序对数量介于相邻长度之间的数只需要对逆序对数量较大的进行部分修改即可。
3. 修改采用dfs进行判断。
#include bits/stdc.h
using namespace std;
int i2;int a;
int ans[1000];
bool check()
{int sum0;int pre 0,cnt 1;for(int j2;ji;j){if(ans[j] pre){cnt;sumj-cnt;}else{pre ans[j];cnt 1;sumj-1;}}
// for(int j i;j1;j--)
// {
// cout(char)(ans[j]a);
// }cout sumendl;if(sum a){for(int j i;j1;j--){cout(char)(ans[j]a);}return true;}else{return false;}
}bool dfs(int pos,int most)
{if(pos 1){return check();}for(int j 0;jmost;j){ans[pos] j;if(dfs(pos-1,max(0,j))) return true;}return false;
}
int main()
{cina;int num[1000] {0};//可以先输出试探范围 for(;i999;i){num[i] num[i-1]i-1;if(anum[i]) break;}dfs(i,i-1);return 0;
}