题目大意:已知B的范围,求a1x1+a2x2+...+anxn==B存在非负正整数解的B的数量,N<=12,ai<=1e5,B<=1e12

同余最短路裸题

思想大概是这样的,我们选定一个最小的$ai$,让其他的数用最小的代价去拼凑取余a1之后的数,这其实可以看成求最短路的过程

想象图中有amin个点(0~amin-1),$k$和$k+ai$之间连了一条长度为ai的边,通过跑最短路的方式,尽可能得去拼凑出取余amin以后的余数的最小花费

绝对不写spfa

 #include <queue>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define ll long long
#define N 400010
#define uint unsigned int
#define inf 0x3f3f3f3f3f3f3fll
using namespace std; int n,use[N];
ll a[N],amin;
ll dis[N],bmin,bmax;
struct node{
int id;ll d;
friend bool operator<(const node &s1,const node &s2){
return s1.d>s2.d;}
node(int id,ll d):id(id),d(d){}
node(){}
};
ll dijkstra()
{
priority_queue<node>q;
memset(dis,0x3f,sizeof(dis));
dis[]=;
q.push(node(,));
while(!q.empty()){
node k=q.top();q.pop();int x=k.id;
if(use[x]) continue;use[x]=;
for(int i=;i<=n;i++){
ll v=(x+a[i])%amin;
if(dis[v]>dis[x]+a[i]){
dis[v]=dis[x]+a[i];
q.push(node(v,dis[v]));
}
}
}
} int main()
{
scanf("%d%lld%lld",&n,&bmin,&bmax);
for(int i=;i<=n;i++)
scanf("%lld",&a[i]);
sort(a+,a+n+);
amin=a[];
dijkstra();
ll ans=;
for(int i=;i<amin;i++){
if(dis[i]<inf&&bmax>=dis[i])
ans+=(bmax-dis[i])/amin+-((bmin--dis[i]>)?((bmin--dis[i])/amin+):); //floor
}
printf("%lld\n",ans);
return ;
}

最新文章

  1. Vi命令备忘
  2. MVC4做网站后台:栏目管理1、添加栏目-续
  3. spark 基本操作
  4. 有关sublime text的插件安装
  5. Three.js基本 Demo
  6. Shell重定向&&gt;file、2&gt;&amp;1、1&gt;&amp;2的区别
  7. [Angularjs]angular ng-repeat与js特效加载先后导致的问题
  8. python 批量请求url
  9. POJ 1743 (后缀数组 二分) Musical Theme
  10. xslt语法之---基础语法
  11. SPM HW1 A project
  12. springboot情操陶冶-jmx解析
  13. 20172328 暑假作业 之 实现安卓小程序Enjoy-all
  14. 动态规划——Valid Permutations for DI Sequence
  15. 5 第一个Django第4部分(表单和通用视图)
  16. Python拆分DataFrame
  17. 【数据结构】约瑟夫问题 C语言链表实现
  18. Jira客户端
  19. 解题2(IpIsSameSubNet)
  20. Hexo之部署github

热门文章

  1. 菜鸟学习ios
  2. java深入的单例模式
  3. docker 下载镜像 ( 以 mysql为例 )
  4. Unhandled &#39;error&#39; event
  5. VS调试ASP.NET浏览器会不断的发出POLL请求
  6. Java压缩和解压缩文件工具
  7. Tcl学习之--表达式
  8. Newton均差插值性质证明
  9. 遗传奥秘的伟大揭秘者:J.Watson
  10. Struts2值栈的相关操作