BZOJ2118: 墨墨的等式
来源:互联网 发布:魔兽世界mac国服下载 编辑:程序博客网 时间:2024/04/30 07:19
BZOJ2118: 墨墨的等式
完全背包求可行方案数·最短路
题解:
http://blog.csdn.net/lych_cys/article/details/50804776
核心思想:设其中最小的w是p,设d[i]表示总重量%p=i的最小重量。
放入一个重量为w的物品时,d[i]+w去更新d[(i+w)%p],最短路即可。
另外p不取最小的w正确性没有影响,就是点数多了。
Code:
#include <iostream>#include <cstring>#include <cstdio>#include <queue>#define D(x) cout<<#x<<" = "<<x<<" "#define E cout<<endlusing namespace std;typedef long long ll;const ll N = 1e6+5;ll n,p,low,high,a[N],d[N]; bool vis[N];ll que(ll x){ ll res=0; for(ll i=0;i<p;i++) if(d[i]<=x){ res+=(x-d[i])/p+1; } return res;}void spfa(){ memset(d,0x3f,sizeof(d)); queue<int> q; q.push(0); d[0]=0; while(!q.empty()){ ll x=q.front(); q.pop(); vis[x]=false; for(ll i=1;i<=n;i++){ ll v=(x+a[i])%p; if(d[v]>d[x]+a[i]){ d[v]=d[x]+a[i]; if(!vis[v]){ vis[v]=true; q.push(v); } } } }}int main(){ cin>>n>>low>>high; p=1e6; for(ll i=1;i<=n;i++){ cin>>a[i]; if(!a[i]){ i--;n--;continue; } p=min(p,a[i]); } spfa(); //for(ll i=0;i<p;i++)D(d[i]); E; cout<<que(high)-que(low-1)<<endl;}
阅读全文
0 0
- [bzoj2118]墨墨的等式
- BZOJ2118 墨墨的等式
- BZOJ2118: 墨墨的等式
- bzoj2118 墨墨的等式
- BZOJ2118: 墨墨的等式
- 【bzoj2118】墨墨的等式
- BZOJ2118: 墨墨的等式
- 【BZOJ2118】墨墨的等式
- bzoj2118 墨墨的等式 最短路
- 【BZOJ2118】墨墨的等式(dijkstra)
- 【bzoj2118】墨墨的等式 最短路建模
- BZOJ2118: 墨墨的等式 思维建图
- [BZOJ2118]墨墨的等式(数学+图论)
- 墨墨的等式
- 【bzoj2257】墨墨的等式
- 2118: 墨墨的等式
- bzoj2118
- 【BZOJ】2118 墨墨的等式
- MPEG2/TS 获取Video PID
- Java List的操作示例
- 50个最常用的UNIX / Linux命令(示例)
- 深入浅出JMS(三)--ActiveMQ简单的HelloWorld实例
- SVN中trunk,branches,tags用法详解
- BZOJ2118: 墨墨的等式
- Android SearchView修改字体颜色
- JavaScript 使用div替换button 点击事件
- Android学习笔记之小技巧——左右切换
- idea中将多个spring boot项目放在一个maven项目中
- mysql更新语句获取受影响行数和插入记录id
- 编辑xml文件时不能自动提示问题的解决
- java 栈的isEmpty()和empty()有什么区别
- 浅谈php7的重大新特性