这是最短路问题和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. shiro授权及自定义realm授权(七)

    1.授权流程

  2. windows系统中hosts文件位置

    C:\Windows\System32\drivers\etc\hosts 10.0.0.213 mr1.bic.zte.com 10.0.0.2 mr2.bic.zte.com 10.0.0.102 ...

  3. Libevent源码分析—从使用Libevent库开始

    练习libevent库的使用,主要是几个API的调用顺序.根据event.h的开头注释部分可知,要使用libevent库,主要的几个API及调用顺序为:         event_base()初始化 ...

  4. python实战===教你用微信每天给女朋友说晚安

    但凡一件事,稍微有些重复.我就考虑怎么样用程序来实现它. 这里给各位程序员朋友分享如何每天给朋友定时微信发送”晚安“,故事,新闻,等等··· ···最好运行在服务器上,这样后台挂起来更方便. 准备: ...

  5. ES系列九、ES优化聚合查询之深度优先和广度优先

    1.优化聚合查询示例 假设我们现在有一些关于电影的数据集,每条数据里面会有一个数组类型的字段存储表演该电影的所有演员的名字. { "actors" : [ "Fred J ...

  6. Python3学习笔记20-获取对象信息

    当我们拿到一个对象的引用时,如何知道这个对象是什么类型.有哪些方法呢? 基本类型都可以用type()判断: print(type(123)) print(type('str')) print(type ...

  7. NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{HBmUtjMOQP2pgLFFwqa_Og}{172.16.0.163}{172.16.0.163:9300}] ]

    1.找到elasticsearch的安装目录,在config目录找到elasticsearch.yml,查看cluster.name的赋值 2.在SpringBoot的yml文件中,不仅要配置clus ...

  8. Linux清除文件内容的几种方法

    # 清空或删除大文件内容的五种方法: # 法一:通过重定向到 Null 来清空文件内容 $ >test.sh # 法二:使用 ‘true' 命令重定向来清空文件 $ true > test ...

  9. openwrt git 代码下载地址

    openwrt 各个版本代码下载 trunk:git clone git://github.com/openwrt/openwrt.git 15.05  (Chaos Calmer)git clone ...

  10. MariaDB:登陆报错:mysqladmin: connect to server at 'localhost' failed

    见图: 解决办法: /etc/init.d/mysqld stop mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended ...