【8.13校内测试】【DP】【按除数分类】【二分】
感觉今天状态不太好啊一大早就很困,t1卡得有点久,以为三道题都是这个难度,结果难度完全是倒着排的啊!!在dp和数学上还得多练题!!

很像背包的一道DP??先不考虑树的结构,给每个点都先分配一个度数,剩下n-2个度数DP分配,dp[i]表示分配i个点出去可以获得的最大价值,由dp[1]~dp[i-1]转移过来(相当于在所有状态中选择最佳)。可以保证只要剩下n-2个度数分配出去就一定可以成立。
DP有关的题码量真是很少啊...
#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std; int n, a[];
ll dp[]; int main ( ) {
freopen ( "a.in", "r", stdin );
freopen ( "a.out", "w", stdout );
int T;
scanf ( "%d", &T );
while ( T -- ) {
memset ( dp, , sizeof ( dp ) );
scanf ( "%d", &n );
for ( int i = ; i < n; i ++ )
scanf ( "%d", &a[i] );
dp[] = a[] * n;
for ( int i = ; i <= n-; i ++ )
for ( int j = ; j < i; j ++ )
dp[i] = max ( dp[i], dp[j] - a[] + a[i-j+] );
printf ( "%I64d\n", dp[n-] );
}
return ;
}

稍微一推就可以发现,k=k/i*i+k%i(p为余数,k/i向下取整),所以k%i=k-k/i*i,因此可以把所有k/i向下取整相同的i分到一组,i在这段中又可以用等差数列算出来。也能够证明枚举的k/i不超过sqrt(k)个,时间复杂度大大减少。
数学类的想通了码量什么的???
#include<iostream>
#include<cstdio>
#define ll long long
using namespace std; ll n, k; int main ( ) {
freopen ( "b.in", "r", stdin );
freopen ( "b.out", "w", stdout );
scanf ( "%I64d%I64d", &n, &k );
ll ki = ;
ll ans = n * k;
while ( ki <= min ( n, k ) ) {
ll a = k / ki;
ll b = min ( k / a, n );
ans -= a * ( ki + b ) * ( b - ki + ) / ;
ki = b + ;
}
printf ( "%I64d", ans );
return ;
}

今天真正的水题!一眼就能看出二分答案啊!主要是check函数里面要注意,等差数列如果小的值到0了要把之后的全都变成1再判断。
#include<iostream>
#include<cstdio>
#define ll long long
using namespace std; ll n, m, k; bool check ( ll an ) {
ll t1 = , t2 = ;
if ( an >= k ) t1 = ( an - k + + an - ) * ( k - ) / ;
else {
t1 = ( an - ) * an / ;
t1 += ( k - an );
}
if ( n - k + <= an ) t2 = ( an - n + k + an ) * ( n - k + ) / ;
else {
t2 = ( an ) * ( an + ) / ;
t2 += n - ( k + an - );
}
if ( t1 + t2 <= m ) return ;
return ;
} ll erfen ( ) {
ll l = , r = m, res = ;
while ( l <= r ) {
int mid = ( l + r ) >> ;
if ( check ( mid ) ) {
l = mid + ; res = mid;
} else r = mid - ;
}
return res;
} int main ( ) {
freopen ( "c.in", "r", stdin );
freopen ( "c.out", "w", stdout );
int T;
scanf ( "%d", &T );
while ( T -- ) {
ll ans = ;
scanf ( "%I64d%I64d%I64d", &n, &m, &k );
if ( n == m ) {
printf ( "1\n" ); continue;
}
ans = erfen ( );
printf ( "%I64d\n", ans );
}
return ;
}
【8.13校内测试】【DP】【按除数分类】【二分】的更多相关文章
- 【8.31校内测试】【找规律二分】【DP】【背包+spfa】
打表出奇迹!表打出来发现了神奇的规律: 1 1 2 2 3 4 4 4 5 6 6 7 8 8 8 8 9 10 10 11 12 12 12 13 14 14 15 16 16 16 16 16.. ...
- 【8.30校内测试】【找规律模拟】【DP】【二分+贪心】
对于和规律或者数学有关的题真的束手无策啊QAQ 首先发现两个性质: 1.不管中间怎么碰撞,所有蚂蚁的相对位置不会改变,即后面的蚂蚁不会超过前面的蚂蚁或者落后更后面的蚂蚁. 2.因为所有蚂蚁速度一样,不 ...
- 【11.5校内测试】【倒计时5天】【DP】【二分+贪心check】【推式子化简+线段树】
Solution 非常巧妙的建立DP方程. 据dalao们说题目明显暗示根号复杂度??(反正我是没看出来 因为每次分的块大小一定不超过$\sqrt n$,要不然直接每个位置开一个块答案都才为$n$. ...
- 《Clojure编程》笔记 第13章 测试
目录 背景简述 第13章 测试 13.1 术语 13.2 clojure.test 13.2.1 定义测试的两种方式 13.2.1.1 用deftest宏把测试定义成单独的函数 13.2.1.2 用w ...
- 【10.3校内测试【国庆七天乐!】】【DP+组合数学/容斥】【spfa多起点多终点+二进制分类】
最开始想的暴力DP是把天数作为一个维度所以怎么都没有办法优化,矩阵快速幂也是$O(n^3)$会爆炸. 但是没有想到另一个转移方程:定义$f[i][j]$表示每天都有值的$i$天,共消费出总值$j$的方 ...
- 【10.31校内测试】【组合数学】【记忆化搜索/DP】【多起点多终点二进制拆位Spfa】
Solution 注意取模!!! Code #include<bits/stdc++.h> #define mod 1000000007 #define LL long long usin ...
- 【10.17校内测试】【二进制数位DP】【博弈论/预处理】【玄学(?)DP】
Solution 几乎是秒想到的水题叻! 异或很容易想到每一位单独做贡献,所以我们需要统计的是区间内每一位上做的贡献,就是统计区间内每一位是1的数的数量. 所以就写数位dp辣!(昨天才做了数字统计不要 ...
- 【11.8校内测试】【倒计时2天】【状压DP】【随机化?/暴力小模拟】
Solution 数据范围疯狂暗示状压,可是一开始发现状态特别难受. 将每一层的奇偶性状压,预处理所有状态的奇偶性.每一层的输入代表的其实可以是下一层某个点可以被从这一层哪些点转移到. 所以枚举每个状 ...
- 【10.29校内测试】【线段树】【DP】【二进制Trie树求最小值最大】
Solution 标程太暴力惹QAQ 相当于是26棵线段树的说QAQ 不过我写了另一种写法,从大到小枚举每一个字母,标记字典序在这个字母之上的位置为1,每次都建一棵线段树,维护1的数量,即区间和. 修 ...
随机推荐
- C# 应用程序配置文件App.Config和web.config
应用程序配置文件,对于asp.net是 web.config,对于WINFORM程序是 App.Config(ExeName.exe.config). 配置文件,对于程序本身来说,就是基础和依据,其本 ...
- 2018 ICPC 徐州网络赛
2018 ICPC 徐州网络赛 A. Hard to prepare 题目描述:\(n\)个数围成一个环,每个数是\(0\)~\(2^k-1\),相邻两个数的同或值不为零,问方案数. solution ...
- C基础 - 终结 Size Balanced Tree
引言 - 初识 Size Balanced Tree 最近在抽细碎的时间看和学习 random 的 randnet 小型网络库. iamrandom/randnet - https://github. ...
- 记录一款Unity VR视频播放器插件的开发
效果图 先上一个效果图: 背景 公司最近在做VR直播平台,VR开发我们用到了Unity,而在Unity中播放视频就需要一款视频插件,我们调研了几个视频插件,记录两个,如下: Unity视频插件调研 网 ...
- http请求与传参
这并不算是文章,暂时只做粗略地记录,以免忘记,因此会显得杂乱无章,随便抓了几个包和对postman截图,日后有空再完善 1.get方式 只有一种方式,那就是在url后面跟参数 2.post方式 1)表 ...
- JQ + CSS实现浪漫表白必备
JQ + CSS实现浪漫表白必备页面 效果图: 图片素材 : 代码如下,复制即可使用: <!DOCTYPE html> <html> <head> <meta ...
- GLOBAL_NAMES参数研究
最近在配置Stream时,发现必须要把GLOBAL_NAMES参数的指设置为TRUE,具体原因为何不知.但是发现在设置了该参数之后,数据库每天的物化视图刷新出现了问题.之后查明原因,是DBLINK出现 ...
- Linux基础 - crontab
列出当前用户设置的定时任务 crontab -l 编辑定时任务 crontab -e 用法 m h dom mon dow * * * * * command 字段详解: *:any m: minut ...
- 关于json中转义字符/正斜杠的问题。
1.首先有关转义字符 可以看百度百科: 先不管/是否需要转义,我们去json的官方网站去看看:http://www.json.org/ 可见有这个,那么意思是 json中 又规定建议了一下,意思是虽然 ...
- xcode7 调用相册权限无提示
1) 打开工程的Info.pilst: 2) 把 Bundle name 和 Bundle display name 的 value值 ,改成跟项目app名一致: 这样系统才能正确地接收到调用请求