这是最短路问题和01背包问题的相结合

第一次用01背包

把j打成了i检查了半个小时  下次要注意!

使用的油耗相当于容量  而power相当于价值

先用dijkstra把从基地到所有路的最短情况算出来

然后开始01背包

所有最短路的油耗相加就是总的容量

然后开始dp【j】 算出油耗为j时能获取的最大power

大于总的power的一半时输出

#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include<cstdio>
using namespace std; #define INF 0x3f3f3f3f
#define M 110 int m1[M][M];
int dis[M];
int vis[M];
int n;
int v[M]; void dijkstra()
{
memset(vis,,sizeof(vis)); for(int i=;i<=n;i++)dis[i]=INF;
dis[]=;
vis[]=;
for(int i=;i<=n;i++)
{
int minn=INF;
int u=;
for(int j=;j<=n;j++)
{
if(!vis[j]&&minn>dis[j])
{
u=j;minn=dis[j];
} }
vis[u]=;
for(int j=;j<=n;j++)
{ if(!vis[j]&&dis[u]+m1[u][j]<dis[j])
dis[j]=dis[u]+m1[u][j]; } } } int main()
{
int cas;scanf("%d",&cas);
while(cas--)
{
int m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
if(i==j)m1[i][j]=;
else m1[i][j]=INF;
} while(m--)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(m1[a][b]>c)m1[a][b]=m1[b][a]=c; } int sumpower=;
for(int i=;i<=n;i++)
{
int x;scanf("%d",&x);
v[i]=x;
sumpower+=x;
}
sumpower/=;
dijkstra(); int dp[]={};
memset(dp,,sizeof(dp));
int oil=;
for(int i=;i<=n;i++)
{
if(dis[i]!=INF)oil+=dis[i];
} for(int i=;i<=n;i++)
{
if(dis[i]!=INF)
{ for(int j=oil;j>=dis[i];j--)
{ dp[j]=max(dp[j],dp[ j-dis[i] ]+v[i]); }
} }
int ok=;int i;
for( i=;i<=oil;i++)
{
if(dp[i]>sumpower)
{
ok=;break;
} }
if(ok)
printf("impossible\n");
else
printf("%d\n",i); }
return ; }

回顾

#include<iostream>
#include<queue>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std; #define N 110
#define inf 0x3f3f3f3f
int dp[]; int n,e,m,s;
int vis[N],dis[N],mp[N][N];
int power[N]; void dijkstra(int s)
{
memset(vis,,sizeof vis);
for(int i=;i<=n;i++)dis[i]=mp[s][i];
dis[s]=; for(int i=;i<=n;i++)
{
int minn=inf,u=-; for(int j=;j<=n;j++)
if(dis[j]<minn&&!vis[j])
{
minn=dis[j];u=j;
}
if(u==-)return ;
vis[u]=;
for(int j=;j<=n;j++)
dis[j]=min(dis[j],dis[u]+mp[u][j]);
}
} int main()
{
int cas;cin>>cas;
while(cas--)
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
if(i==j)mp[i][j]=;
else mp[i][j]=inf;
}
long long oil=;
while(m--)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c); if(mp[a][b]>c)mp[a][b]=mp[b][a]=c; }
int sum=;
for(int i=;i<=n;i++)
{
scanf("%d",&power[i]);
sum+=power[i];
} dijkstra();
//背包 价值为能量 容量为耗油
for(int i=;i<=n;i++)
if(dis[i]!=inf)oil+=dis[i]; memset(dp,,sizeof dp); for(int i=;i<=n;i++)
for(int j=oil;j>=dis[i];j--)
dp[j]=max(dp[j],dp[j-dis[i]]+power[i]);
sum/=;
int i;
for(i=;i<=oil;i++)
if(dp[i]>sum)
{
printf("%d\n",i);break;
}
if(i==oil+)
printf("impossible\n");
}
return ;
}

In Action HDU3339的更多相关文章

  1. HDU-3339 IN ACTION(Dijkstra +01背包)

      Since 1945, when the first nuclear bomb was exploded by the Manhattan Project team in the US, the ...

  2. hdu3339 In Action(Dijkstra+01背包)

    /* 题意:有 n 个站点(编号1...n),每一个站点都有一个能量值,为了不让这些能量值连接起来,要用 坦克占领这个站点!已知站点的 之间的距离,每个坦克从0点出发到某一个站点,1 unit dis ...

  3. HDU3339 In Action 【最短路】+【01背包】

    <题目链接> 题目大意: 给出一个0-n组成的图,1-n的点上分布着值为pow的电站,给出图的m条边以及距离,从0出发到n个点中的x个点的行走距离和最小(因为是每炸一个点派出一辆坦克),且 ...

  4. redux-amrc:用更少的代码发起异步 action

    很多人说 Redux 代码多,开发效率低.其实 Redux 是可以灵活使用以及拓展的,经过充分定制的 Redux 其实写不了几行代码.今天先介绍一个很好用的 Redux 拓展-- redux-amrc ...

  5. 尝试asp.net mvc 基于controller action 方式权限控制方案可行性

    微软在推出mvc框架不久,短短几年里,版本更新之快,真是大快人心,微软在这种优秀的框架上做了大量的精力投入,是值得赞同的,毕竟程序员驾驭在这种框架上,能够强力的精化代码,代码层次也更加优雅,扩展较为方 ...

  6. ASP.NET Core 中文文档 第四章 MVC(4.1)Controllers, Actions 和 Action Results

    原文:Controllers, Actions, and Action Results 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:许登洋(Seay) Action 和 acti ...

  7. java中Action层、Service层和Dao层的功能区分

    Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. DAO只 ...

  8. SpringMVC的Action在同一时间里只允许同一个浏览器的单次进入?

    最近用SpringMVC写了一个很简单的测试程序,代码如下: @Controller public class LongTimeTaskController { @RequestMapping(val ...

  9. No result defined for action com.lk.IndexAction and result success

    意图访问一个 /es/index.action 竟然出现: [SAE ] ERROR [05-11 13:54:32] [http-80-5] com.opensymphony.xwork2.util ...

随机推荐

  1. Javaweb学习笔记——(七)——————myexlipse基本使用、jdk5.0新特性及反射讲解

    1.debug调试模式: *使用这种模式,调试程序(看到程序运行停止在这一行) -显示出来行号 -双击左边,出现一个圆点,表示设置了一个断点 *使用debug as方式,运行程序 -特使是否进入到调试 ...

  2. Linux 设置最大链接

    最大连接数 ulimit -SHn # 最大文件句柄数,最大打开文件数(等同最大连接数) ulimit -a # 查看 /etc/security/limits.conf # 进程最大打开文件数 # ...

  3. NULL、0、nullptr的区别

    某些时候,我们需要将指针赋值为空指针,以防止野指针.   有人喜欢使用NULL作为空指针常量使用,例如:int* p = NULL;. 也有人直接使用0值作为空指针常量,例如:int* p = 0;. ...

  4. ACM-ICPC 2018 徐州赛区网络预赛 G题

    题目链接: https://nanti.jisuanke.com/t/31459 具体思路: 先顺序输入,然后回溯,假设已经加入了n个点,那么在加入的同时,首先看一下原先x轴上已经有过的点,找到第一个 ...

  5. 发送http请求的方法

    在http/1.1 协议中,定义了8种发送http请求的方法 get post options head put delete trace connect patch. 根据http协议的设计初衷,不 ...

  6. Python3 Win下安装 scipy

    没有利用Anaconda安装python库时可能遇到一些问题,例如直接 pip3 install scipy 可能报错,安装失败.原因是Scipy的安装需要依赖MKL库,官方的Numpy不包含MKL, ...

  7. ARMV8 datasheet学习笔记3:AArch64应用级体系结构之Memory Type and Attributes

    1.前言 2. Memory类型和属性 memory分为normal memory和device memory,两种类型的Memory有各自的属性,除了下面介绍的几种属性外,还有其他一些杂项属性 2. ...

  8. centos6.5 nfs实时共享

    一.什么时NFS NFS(Network File System)——网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,NF ...

  9. jenkins checkstyle:local variable hides a field

    源代码: 1 2 3 4 5 6 7 8 //应用上下文 private static ApplicationContext applicationContext; public static voi ...

  10. zabbix系列(八)zabbix添加对web页面url的状态监控

    通过zabbi做web监控不仅仅可以监控到站点的响应时间,还可以根据站点返回的状态码,或者响应时间做报警 1.对需要监控的主机添加web监控   在configuration—hosts 中打开主机列 ...