EZOJ #226
2024-10-15 07:50:45
分析
我们可以建一个k层图,把dp转移的三维对应到每个点上,每个第k层点连向0层点
我们让第0层点为实点其余为虚点,只要碰到虚点就dfs到他连得所有实点再将实点入队即可
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
priority_queue<pair<int,int> >q;
bool vis[][][];
int d[],v[],a[],b[],n,m,K,res;
inline void go(int x,int y,int z){
if(vis[x][y][z])return;
vis[x][y][z]=;
if(x==m){
if(y==K&&z<n&&res+b[z]<d[z]){
d[z]=res+b[z];
q.push(make_pair(-d[z],z));
}
}else {
go(x+,y,z);
if(y<K)go(x+,y+,z^(<<x));
}
}
int main(){
int i,j,k;
scanf("%d%d",&n,&K);
while((<<m)<n)m++;
memset(d,0x3,sizeof(d));
for(i=;i<n;i++){
scanf("%d",&v[i]);
if(v[i]>=)d[i]=v[i],q.push(make_pair(-d[i],i));
}
for(i=;i<n;i++)scanf("%d",&a[i]);
for(i=;i<n;i++)scanf("%d",&b[i]);
while(!q.empty()){
int x=q.top().second,y=-q.top().first;
cout<<y<<endl;
q.pop();
if(x<n){
if(y>d[x])continue;
q.push(make_pair(-y-a[x],x+n));
}else {
res=y;
go(,,x-n);
}
}
int Ans=;
for(i=;i<n;i++)Ans^=d[i];
cout<<Ans;
return ;
}
最新文章
- ZeroMQ接口函数之 :zmq_connect - 由一个socket创建一个对外连接
- [转]编译安装libevent,memcache,以及php的memcached扩展
- (十一) 一起学 Unix 环境高级编程 (APUE) 之 高级 IO
- HTML5 ——本地存储
- py替换掉换行符
- HDU 2897 (博弈 找规律) 邂逅明下
- Codeforces Bubble Cup 8 - Finals [Online Mirror] B. Bribes lca
- Gradle的简介与安装
- ie启动不了的解决办法,win7,win8都可以
- 使用原生 python 造轮子搭建博客
- Django 缓存
- [angularjs] angularjs系列笔记(二)指令
- 洛谷P2678跳石头题解
- ubuntu upgrade
- js获取时间戳(new date()参数获取)
- POJ3090(SummerTrainingDay04-M 欧拉函数)
- geth 命令
- Windows7安装CodeTyphon
- 比较JSF、Spring MVC、Stripes、Struts 2、Tapestry、Wicket
- 一个JS引发的血案
热门文章
- Exce信息提取
- SQL语句 合并列值 将一列的多个值合并成一行
- PAT 甲级1003 Emergency (25)(25 分)(Dikjstra,也可以自己到自己!)
- Python模块包(pycharm右键创建文件夹和python package的区别)中__init__.py文件的作用
- .NET单点登录实现方法----两种
- Hadoop MapReduce 初步学习总结
- 使用exe4j把java程序生成可执行的.exe文件
- PyQt 5控件
- iframe有哪些缺点?
- WebService与WCF