2019.03.28 bzoj3598: [Scoi2014]方伯伯的商场之旅(带权中位数+数位dp)
传送门
题意咕咕咕自己读吧挺简单的
思路:
由带权中位数的性质可以得到对于每个数放在每个二进制位的代价一定是个单调或者单峰函数,因此我们先把所有的数都挪到第一个位置,然后依次向右枚举峰点(极值点)把能挪的挪走即可。
代码:
#include<bits/stdc++.h>
#define ri register int
using namespace std;
typedef long long ll;
int a[62],len=0;
ll f[62][1205],L,R;
int K;
inline ll dfs(int pos,int sum,bool lim){
if(pos>len)return sum;
if(!lim&&~f[pos][sum])return f[pos][sum];
ll ret=0;
for(ri i=0,up=lim?a[pos]:K-1;i<=up;++i)ret+=dfs(pos+1,sum+i*(pos-1),lim&&i==up);
if(!lim)f[pos][sum]=ret;
return ret;
}
inline ll calc(int pos,int sum,int mid,bool lim){
if(pos>len)return max(sum,0);
if(!lim&&~f[pos][sum])return f[pos][sum];
ll ret=0;
for(ri i=0,up=lim?a[pos]:K-1;i<=up;++i)ret+=calc(pos+1,sum+(pos<mid?-i:i),mid,lim&&i==up);
if(!lim)f[pos][sum]=ret;
return ret;
}
inline ll solve(ll x){
len=0;
while(x)a[++len]=x-x/K*K,x/=K;
reverse(a+1,a+len+1);
memset(f,-1,sizeof(f));
ll ret=dfs(1,0,1);
for(ri i=2;i<=len;++i)memset(f,-1,sizeof(f)),ret-=calc(1,0,i,1);
return ret;
}
int main(){
cin>>L>>R>>K;
cout<<solve(R)-solve(L-1);
return 0;
}
2019.03.28 bzoj3598: [Scoi2014]方伯伯的商场之旅(带权中位数+数位dp)的更多相关文章
- 2019.03.28 bzoj3594: [Scoi2014]方伯伯的玉米田(二维bit优化dp)
传送门 题意咕咕咕 思路:直接上二维bitbitbit优化dpdpdp即可. 代码: #include<bits/stdc++.h> #define N 10005 #define K 5 ...
- [BZOJ3598][SCOI2014]方伯伯的商场之旅(数位DP,记忆化搜索)
3598: [Scoi2014]方伯伯的商场之旅 Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 449 Solved: 254[Submit][Sta ...
- BZOJ3598 SCOI2014方伯伯的商场之旅(数位dp)
看到数据范围就可以猜到数位dp了.显然对于一个数最后移到的位置应该是其中位数.于是考虑枚举移到的位置,那么设其左边和为l,左右边和为r,该位置数为p,则需要满足l+p>=r且r+p>=l. ...
- 2019.03.28 bzoj3597: [Scoi2014]方伯伯运椰子(01分数规划)
传送门 题意咕咕咕有点麻烦不想写 思路: 考虑加了多少一定要压缩多少,这样可以改造边. 于是可以通过分数规划+spfaspfaspfa解决. 代码: #include<bits/stdc++.h ...
- 2019.03.28 bzoj3595: [Scoi2014]方伯伯的Oj(splay+map+set)
传送门 题意简述: 给一个有优先级的nnn个人的序列,初始的时候第iii个人排名为iii,现在有mmm个操作,种类如下: 把编号为xxx的改成yyy,输出改前xxx的排名 把编号为xxx放到队首,输出 ...
- bzoj3598 [Scoi2014]方伯伯的商场之旅
数位dp,我们肯定枚举集合的位置,但是如果每次都重新dp的话会很麻烦,所以我们可以先钦定在最低位集合,dp出代价,然后再一步步找到正确的集合点,每次更改的代价也dp算就好了. #include < ...
- 洛谷P3286 [SCOI2014]方伯伯的商场之旅
题目:洛谷P3286 [SCOI2014]方伯伯的商场之旅 思路 数位DP dalao说这是数位dp水题,果然是我太菜了... 自己是不可能想出来的.这道题在讲课时作为例题,大概听懂了思路,简单复述一 ...
- 【bzoj3598】: [Scoi2014]方伯伯的商场之旅
Description 方伯伯有一天去参加一个商场举办的游戏.商场派了一些工作人员排成一行.每个人面前有几堆石子.说来也巧,位置在 i 的人面前的第 j 堆的石子的数量,刚好是 i 写成 K 进制后的 ...
- 【bzoj3598】 Scoi2014—方伯伯的商场之旅
http://www.lydsy.com/JudgeOnline/problem.php?id=3598 (题目链接) 题意 Solution 原来这就是极水的数位dp,呵呵= =,感觉白学了.htt ...
随机推荐
- jQuery 效果 - 动画 animate() 方法
我们先看一个demo <!DOCTYPE html> <html> <head> <script src="/jquery/jquery-1.11. ...
- Java读取excel数据保存入库
Java开发读取excel表格数据入库保存: List<Map<String, Object>> list = null; String filePath = filePath ...
- shardingsphere多数据源(springboot + mybatis+shardingsphere+druid)
org.springframeword.boot:spring-boot-starer-web: 2.0.4release io.shardingsphere:sharding-jdbc-spring ...
- h5-上传图片预览
<div class="content_sq" style="position:relative;"> <img src="imag ...
- StringUtils.isEmpty StringUtils.isBlank
两个方法都是判断字符是否为空的.前者是要求没有任何字符,即str==null 或 str.length()==0:后者要求是空白字符,即无意义字符.其实isBlank判断的空字符是包括了isEmpty ...
- 线程和进程PYTHON
基本概念: 计算机一次只能运行一个进程,而一个进程又可以有多个线程,例如百度网盘的上传和下载. 1.线程的创建 .调用threading模块 .创建线程theading.Threads(target ...
- Error merging: refusing to merge unrelated histories
解决方案: git pull git pull origin master git pull origin master --allow-unrelated-histories idea提交git提交 ...
- linux下进程绑定cpu情况查看的几种方法
1.pidstat命令 查看进程使用cpu情况,如果绑定了多个cpu会都显示出来 pidstat -p `pidof 进程名` -t 1 2.top命令 (1)top (2)按f键可以选择下面配置选项 ...
- java中解析excel 批量插入数据库
Facade 层 实现类 (@Service("samePeriodModelImportFacade")) 1. 获取cells 的方法 public Cells getCel ...
- unity 傅老师学习
辅助插件 I tweeen anmition 补充valueto https://www.bilibili.com/read/cv103358 开关门 iTween event脚本 iT ...