A

B

C

给你一个长度为N的01串 你可以翻转一次任意【L,R】的区间

问你最长的不递减序列为多少长

处理出1的前缀和 和2的后缀和

然后N^2 DP 处理出 【L,R】区间的最长不递增序列

#include <bits/stdc++.h>
#define PI acos(-1.0)
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!\n")
#define pb push_back
#define inf 1e9
//std::ios::sync_with_stdio(false);
using namespace std;
//priority_queue<int,vector<int>,greater<int>> que; get min
const double eps = 1.0e-10;
const double EPS = 1.0e-4;
typedef pair<int, int> pairint;
typedef long long ll;
typedef unsigned long long ull;
const int turn[][] = {{, }, { -, }, {, }, {, -}};
//priority_queue<int, vector<int>, less<int>> que;
//next_permutation
const int MAXN = ;
int a[];
int pre[];
int suf[];
int dp[][][];
int ans = ;
int main()
{
ios::sync_with_stdio(false);
cin.tie();
int n;
cin >> n;
for (int i = ; i <= n; i++)
{
cin >> a[i];
}
for (int i = ; i <= n; i++)
{
pre[i] = pre[i - ] + (a[i] == );
}
for (int i = n; i >= ; i--)
{
suf[i] = suf[i + ] + (a[i] == );
}
for (int i = ; i <= n; i++)
{
ans = max(pre[i] + suf[i], ans);
}
//cout<<ans<<endl;
for (int i = ; i <= n; i++)
{
for (int j = i; j <= n; j++)
{
dp[i][j][] = dp[i][j - ][] + (a[j] == );
dp[i][j][] = max(dp[i][j - ][], dp[i][j - ][]) + (a[j] == );
ans = max(ans, max(dp[i][j][], dp[i][j][]) + pre[i - ] + suf[j + ]);
}
}
cout << ans << endl;
}

D

找规律

考虑构造q(x).先让常数项小于k,也就是让相乘后的常数项+p小于k.

q(x)的常数项就是p / (-k).这样会产生一次项,那么继续消一次项.直到最后的p = 0.

#include <bits/stdc++.h>
#define PI acos(-1.0)
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!\n")
#define pb push_back
#define inf 1e9
//std::ios::sync_with_stdio(false);
using namespace std;
//priority_queue<int,vector<int>,greater<int>> que; get min
const double eps = 1.0e-10;
const double EPS = 1.0e-4;
typedef pair<int, int> pairint;
typedef long long ll;
typedef unsigned long long ull;
//const int maxn = 3e5 + 10;
const int turn[][] = {{, }, { -, }, {, }, {, -}};
//priority_queue<int, vector<int>, less<int>> que;
//next_permutation
ll Mod = ;
int cnt;
int ans[];
int main()
{
ll p;
ll k;
cin >> p >> k;
ll flag = ;
while (p != )
{
ans[++cnt] = p % k;
p = p / k * (-);
if (flag)
{
p += flag;
flag = ;
}
if (p < )
{
flag += (k - p) / k;
p += flag * k;;
}
}
cout << cnt << endl;
for (int i = ; i <= cnt; i++)
{
cout << ans[i] << " ";
}
cout << endl;
return ;
}

最新文章

  1. 深入学习jQuery选择器系列第一篇——基础选择器和层级选择器
  2. .NET MVC 和 JAVA MVC有什么区别?
  3. PHP打印测试,PHP调试技巧
  4. ANSYS经典APDL编程
  5. SAP的物料归档
  6. Windows 8.1 应用再出发 - 创建我的第一个应用
  7. magento日常使用
  8. android sdk启动报错error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037:
  9. [译]GotW #1: Variable Initialization
  10. 如何直观的解释back propagation算法?
  11. [知了堂学习笔记]_Jquery_Validate 表单校验的使用
  12. python 字典用法
  13. sublime 浏览器快捷键设置
  14. JAVA8 in Action:行为参数化,匿名类及lambda表达式的初步认知实例整理
  15. Sublime Text 3激活
  16. Python CBV和FBV
  17. Eureka与ZooKeeper 的比较(转)
  18. 设计模式(9)--Composite(组合模式)--结构型
  19. static成员函数不能调用non-static成员函数
  20. KVM源代码框架

热门文章

  1. 卡死浏览器使IPhone的自带safari打开重启的JS循环代码
  2. trim配合prefix,prefixOverrides,suffix,suffixOverrides构建动态sql语句
  3. org.hibernate.MappingException: An AnnotationConfiguration instance is required to use &lt;mapping clas
  4. MVC、MVP 和 MVVM
  5. java网络通信:伪异步I/O编程(PIO)
  6. web form 防止一个请求重复提交
  7. 快速编写 &lt;a&gt; ————CSS3
  8. python启动线程查看线程的名称和id;python杀掉进程的方法
  9. note.js使用express创建项目的步骤以及ip和端口配置
  10. ssh-config的使用