感觉今天状态不太好啊一大早就很困,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】【按除数分类】【二分】的更多相关文章

  1. 【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.. ...

  2. 【8.30校内测试】【找规律模拟】【DP】【二分+贪心】

    对于和规律或者数学有关的题真的束手无策啊QAQ 首先发现两个性质: 1.不管中间怎么碰撞,所有蚂蚁的相对位置不会改变,即后面的蚂蚁不会超过前面的蚂蚁或者落后更后面的蚂蚁. 2.因为所有蚂蚁速度一样,不 ...

  3. 【11.5校内测试】【倒计时5天】【DP】【二分+贪心check】【推式子化简+线段树】

    Solution 非常巧妙的建立DP方程. 据dalao们说题目明显暗示根号复杂度??(反正我是没看出来 因为每次分的块大小一定不超过$\sqrt n$,要不然直接每个位置开一个块答案都才为$n$. ...

  4. 《Clojure编程》笔记 第13章 测试

    目录 背景简述 第13章 测试 13.1 术语 13.2 clojure.test 13.2.1 定义测试的两种方式 13.2.1.1 用deftest宏把测试定义成单独的函数 13.2.1.2 用w ...

  5. 【10.3校内测试【国庆七天乐!】】【DP+组合数学/容斥】【spfa多起点多终点+二进制分类】

    最开始想的暴力DP是把天数作为一个维度所以怎么都没有办法优化,矩阵快速幂也是$O(n^3)$会爆炸. 但是没有想到另一个转移方程:定义$f[i][j]$表示每天都有值的$i$天,共消费出总值$j$的方 ...

  6. 【10.31校内测试】【组合数学】【记忆化搜索/DP】【多起点多终点二进制拆位Spfa】

    Solution 注意取模!!! Code #include<bits/stdc++.h> #define mod 1000000007 #define LL long long usin ...

  7. 【10.17校内测试】【二进制数位DP】【博弈论/预处理】【玄学(?)DP】

    Solution 几乎是秒想到的水题叻! 异或很容易想到每一位单独做贡献,所以我们需要统计的是区间内每一位上做的贡献,就是统计区间内每一位是1的数的数量. 所以就写数位dp辣!(昨天才做了数字统计不要 ...

  8. 【11.8校内测试】【倒计时2天】【状压DP】【随机化?/暴力小模拟】

    Solution 数据范围疯狂暗示状压,可是一开始发现状态特别难受. 将每一层的奇偶性状压,预处理所有状态的奇偶性.每一层的输入代表的其实可以是下一层某个点可以被从这一层哪些点转移到. 所以枚举每个状 ...

  9. 【10.29校内测试】【线段树】【DP】【二进制Trie树求最小值最大】

    Solution 标程太暴力惹QAQ 相当于是26棵线段树的说QAQ 不过我写了另一种写法,从大到小枚举每一个字母,标记字典序在这个字母之上的位置为1,每次都建一棵线段树,维护1的数量,即区间和. 修 ...

随机推荐

  1. NIO编程中buffer对象的理解以及API的使用

    概念讲解,转自https://www.cnblogs.com/lxzh/archive/2013/05/10/3071680.html  ,将的非常好! Buffer 类是 java.nio 的构造基 ...

  2. java 一个函数如何返回多个值

    在开发过程中,经常会有这种情况,就是一个函数需要返回多个值,这是一个问题!! 网上这个问题的解决方法: 1.使用map返回值:这个方法问题是,你并不知道如何返回值的key是什么,只能通过doc或者通过 ...

  3. Java WebService Axis 初探

    最近在学习WebService 开始了: 一:服务端的编写与发布 1. 工具准备: java的开发环境(这里就不多说了).   axis2官网上下载最新的就可以了(我这里用的是axis2-1.4.1- ...

  4. vue总结 08状态管理vuex

      状态管理 类 Flux 状态管理的官方实现 由于状态零散地分布在许多组件和组件之间的交互中,大型应用复杂度也经常逐渐增长.为了解决这个问题,Vue 提供 vuex:我们有受到 Elm 启发的状态管 ...

  5. Python_oldboy_自动化运维之路(二)

    本节内容: 1.pycharm工具的使用 2.进制运算 3.表达式if ...else语句 4.表达式for 循环 5.break and continue 6.表达式while 循环 1.pycha ...

  6. ZooKeeper常见问题

    转载自原文:zookeeper(二)常见问题汇总 一.为什么zookeeper要部署基数台服务器? 所谓的zookeeper容错是指,当宕掉几个zookeeper服务器之后,剩下的个数必须大于宕掉的个 ...

  7. ef查询mysql数据库数据支持DbFunctions函数

    1.缘由 快下班的时候,一同事说在写linq查询语句时where条件中写两时间相减大于某具体天数报错:后来仔细一问,经抽象简化,可以总结为下面的公式: a.当前时间 减去 某表时间字段 大于 某具体天 ...

  8. Ansible常见模块介绍

    本节内容: ansible命令基础 常见模块举例 一.ansible命令基础 语法: ansible <host-pattern> [-f forks] [-m module_name] ...

  9. Phoenix的安装使用与SQL查询HBase

    一. Phoenix的简介 1. 什么是phoenix 现有hbase的查询工具有很多如:Hive,Tez,Impala,Shark/Spark,Phoenix等.今天主要说Phoenix.phoen ...

  10. jquery插件使用记录

    1.imgPreview(图片预览功能插件) demo地址:http://james.padolsey.com/demos/imgPreview/full/