Codeforces 934 最长不递减子序列 多项式系数推导
2024-09-08 05:32:35
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 ;
}
最新文章
- 深入学习jQuery选择器系列第一篇——基础选择器和层级选择器
- .NET MVC 和 JAVA MVC有什么区别?
- PHP打印测试,PHP调试技巧
- ANSYS经典APDL编程
- SAP的物料归档
- Windows 8.1 应用再出发 - 创建我的第一个应用
- magento日常使用
- android sdk启动报错error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037:
- [译]GotW #1: Variable Initialization
- 如何直观的解释back propagation算法?
- [知了堂学习笔记]_Jquery_Validate 表单校验的使用
- python 字典用法
- sublime 浏览器快捷键设置
- JAVA8 in Action:行为参数化,匿名类及lambda表达式的初步认知实例整理
- Sublime Text 3激活
- Python CBV和FBV
- Eureka与ZooKeeper 的比较(转)
- 设计模式(9)--Composite(组合模式)--结构型
- static成员函数不能调用non-static成员函数
- KVM源代码框架
热门文章
- 卡死浏览器使IPhone的自带safari打开重启的JS循环代码
- trim配合prefix,prefixOverrides,suffix,suffixOverrides构建动态sql语句
- org.hibernate.MappingException: An AnnotationConfiguration instance is required to use <;mapping clas
- MVC、MVP 和 MVVM
- java网络通信:伪异步I/O编程(PIO)
- web form 防止一个请求重复提交
- 快速编写 <;a>; ————CSS3
- python启动线程查看线程的名称和id;python杀掉进程的方法
- note.js使用express创建项目的步骤以及ip和端口配置
- ssh-config的使用