看到数据范围就可以猜到数位dp了。显然对于一个数最后移到的位置应该是其中位数。于是考虑枚举移到的位置,那么设其左边和为l,左右边和为r,该位置数为p,则需要满足l+p>=r且r+p>=l。同时为了防止重复,枚举的应该是最左的能移到的位置,那么还需要满足l<p+r。算的时候枚举p、l、r,统计方案数,对于已固定部分直接计入,剩余部分由于每个位置都是相同的,根据距离平均值算出代价。注意讨论各种情况,非常恶心。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
#define ll long long
#define N 66
#define K 22
ll l,r;
int k,n,a[N];
ll f[N][N*K];
ll solve(ll m)
{
ll s=;
n=-;
while (m) a[++n]=m%k,m/=k;
for (int i=n;~i;i--)
{
for (int y=;y<a[i];y++)
{
for (int j=n;j>i;j--)
{
int l=,r=,t=;
for (int x=n;x>j;x--) l+=a[x],t+=a[x]*(x-j);
for (int x=j-;x>i;x--) r+=a[x],t+=a[x]*(j-x);
r+=y;t+=y*(j-i);t<<=;
for (int v=max(r,l-a[j]+);a[j]>=v-l&&v-r<=i*(k-);v++)
s+=f[i][v-r]*(t+(v-r)*(j-i++j));
}
int l=,t=;
for (int x=n;x>i;x--) l+=a[x],t+=a[x]*(x-i);
t<<=;
for (int v=max(,l-y+);y>=v-l&&v<=i*(k-);v++)
s+=f[i][v]*(t+v*(+i));
for (int j=i-;~j;j--)
{
int t=,u=;
for (int x=n;x>i;x--) u+=a[x],t+=a[x]*(x-j);
u+=y,t+=y*(i-j);t<<=;
for (int p=;p<k;p++)
{
for (int l=;l<=(i-j-)*(k-);l++)
for (int v=max(,l+u-p+);p>=v-l-u&&v<=j*(k-);v++)
s+=f[j][v]*f[i-j-][l]*(t+l*(i-j)+v*(+j));
}
}
}
}
return s>>;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj3598.in","r",stdin);
freopen("bzoj3598.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
cin>>l>>r>>k;
f[][]=;
for (int i=;i<;i++)
for (int j=;j<=i*(k-);j++)
if (f[i][j]&&f[i][j]<1E16)
for (int x=;x<k;x++)
f[i+][j+x]+=f[i][j];
cout<<solve(r+)-solve(l);
return ;
}

BZOJ3598 SCOI2014方伯伯的商场之旅(数位dp)的更多相关文章

  1. [BZOJ3598][SCOI2014]方伯伯的商场之旅(数位DP,记忆化搜索)

    3598: [Scoi2014]方伯伯的商场之旅 Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 449  Solved: 254[Submit][Sta ...

  2. bzoj 3598 [Scoi2014]方伯伯的商场之旅——数位dp

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3598 TJ:https://www.cnblogs.com/Zinn/p/9351218.h ...

  3. bzoj3598 [Scoi2014]方伯伯的商场之旅

    数位dp,我们肯定枚举集合的位置,但是如果每次都重新dp的话会很麻烦,所以我们可以先钦定在最低位集合,dp出代价,然后再一步步找到正确的集合点,每次更改的代价也dp算就好了. #include < ...

  4. 2019.03.28 bzoj3598: [Scoi2014]方伯伯的商场之旅(带权中位数+数位dp)

    传送门 题意咕咕咕自己读吧挺简单的 思路: 由带权中位数的性质可以得到对于每个数放在每个二进制位的代价一定是个单调或者单峰函数,因此我们先把所有的数都挪到第一个位置,然后依次向右枚举峰点(极值点)把能 ...

  5. bzoj 3598 [ Scoi 2014 ] 方伯伯的商场之旅 ——数位DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3598 数位DP...东看西看:http://www.cnblogs.com/Artanis/ ...

  6. 洛谷P3286 [SCOI2014]方伯伯的商场之旅

    题目:洛谷P3286 [SCOI2014]方伯伯的商场之旅 思路 数位DP dalao说这是数位dp水题,果然是我太菜了... 自己是不可能想出来的.这道题在讲课时作为例题,大概听懂了思路,简单复述一 ...

  7. 【bzoj3598】: [Scoi2014]方伯伯的商场之旅

    Description 方伯伯有一天去参加一个商场举办的游戏.商场派了一些工作人员排成一行.每个人面前有几堆石子.说来也巧,位置在 i 的人面前的第 j 堆的石子的数量,刚好是 i 写成 K 进制后的 ...

  8. 【bzoj3598】 Scoi2014—方伯伯的商场之旅

    http://www.lydsy.com/JudgeOnline/problem.php?id=3598 (题目链接) 题意 Solution 原来这就是极水的数位dp,呵呵= =,感觉白学了.htt ...

  9. [SCOI2014]方伯伯的商场之旅

    Description 方伯伯有一天去参加一个商场举办的游戏.商场派了一些工作人员排成一行.每个人面前有几堆石子.说来也巧,位置在 i 的人面前的第 j 堆的石子的数量,刚好是 i 写成 K 进制后的 ...

随机推荐

  1. 用 Qt 的 QAudioOutput 类播放 WAV 音频文件

    用 Qt 的 QAudioOutput 类播放 WAV 音频文件 最近有一个项目,需要同时控制 4 个声卡播放不同的声音,声音文件很简单就是没有任何压缩的 wav 文件. 如果只是播放 wav 文件, ...

  2. Win SERVER 2008 许可证激活失败,系统重启问题

    服务器系统win server2008 R2 SP1,频繁重启,查看日志 有显示 许可证激活(slui.exe)失败,错误代码如下:0x800401F9 和 Windows 许可证激活失败.错误 0x ...

  3. Drupal views 学习之初识

    1. 简介 用过Yii框架的同学,应该都会用到过GridView和ListView组件.可以很方便的用网格或列表展示内容. 例如淘宝: 网格显示 列表显示 2. 使用view可以方便的配出类似上面的展 ...

  4. WPF binding Tag

    使用一个控件控制另外一个控件的显示与隐藏.

  5. Keil出错解决方法

    1.安装KEIL5后创建工程后出现这个报错 解决方法:打开下图目录的文件. Keil.STM32F1xx_DFP.pdsc文件是只读文件,必须将只读属性取消. 如下图所示,注释掉红色圆圈的哪一行,保存 ...

  6. 【Jmeter测试】BeanShell介绍和使用

      BeanShell是什么? BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; BeanShell是一种松散类型的脚本语言: BeanShell是用Jav ...

  7. MySQL5.6.14从安装到启动全过程

    1.下载 地址:http://dev.mysql.com/downloads/mysql/ 这里选择的是Linux-Generic平台,下载了MySQL-5.6.14-1.linux_glibc2.5 ...

  8. HTML从入门到放弃

    一.HTML 简介 链接:https://www.cnblogs.com/baishuchao/articles/9179920.html 二.HTML 基础 链接:https://www.cnblo ...

  9. Maven私库

    <server> <id>releases</id> <username>admin</username> <password> ...

  10. No module named MYSQLdb 报错

    问题描述: 报错:ImportError: No module named MySQLdb 对于不同的系统和程序有如下的解决方法: easy_install mysql-python (mix os) ...