这是最短路问题和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. python3中的比较函数

    在py2中,比较函数是cmp,而在py3,cmp已经不存在了,Py3启用了新的比较方法 原来在py2中,a>b就会调用a对象中的__cmp__函数,而现在a>b会调用a对象中的__lt__ ...

  2. JS禁止右键查看源码,禁止复制,复制内容到剪切板

    有时候我们希望自己的网页源码不被查看,这时需要关掉鼠标的右击事件;有时候我们也希望禁止选择页面内容Ctrl+C复制. 1.禁止右键查看源码; <script> //设置右键事件 funct ...

  3. Freemarker list 的简单使用

    freemarker list (长度,遍历,下标,嵌套,排序) 1. freemarker获取list的size : Java ArrayList<String> list = new ...

  4. SpringBoot集成监控管理

    (1).添加starter依赖 <dependency> <groupId>org.springframework.boot</groupId> <artif ...

  5. freeRTOS中文实用教程3--中断管理之中断嵌套

    1.前言 最新的 FreeRTOS 移植中允许中断嵌套.中断嵌套需要在 FreeRTOSConfig.h 中设置configKERNEL_INTERRUPT_PRIORITY 和configMAX_S ...

  6. Zookeeper简介与集群搭建【转】

    Zookeeper简介 Zookeeper是一个高效的分布式协调服务,可以提供配置信息管理.命名.分布式同步.集群管理.数据库切换等服务.它不适合用来存储大量信息,可以用来存储一些配置.发布与订阅等少 ...

  7. IDE SATA SCSI iSCSI等存储硬盘对比与分析

    原文地址:http://blog.csdn.net/trochiluses/article/details/21229283 IDE是并口硬盘,(5400-7200转): SATA是串口硬盘,(720 ...

  8. angular下载安装

    1.下载安装nodejs 官方地址:https://nodejs.org/en/download/   2.验证是否安装成功 node -v npm -v   公司内网需要设置代理 npm confi ...

  9. javascript中的return、return true、return false、continue区别

    1.语法为:return 表达式; 2.w3c中的解释: 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果  也就是:当代码执行到return语句时,函数返回一个结果就结束运行了,ret ...

  10. 通过使用CSS字体阴影效果解决hover图片时显示文字看不清的问题

    1.前言 最近需要加入一个小功能,在鼠标越过图片时,提示其大小和分辨率,而不想用增加属性title来提醒,不够好看.然而发现如果文字是一种颜色,然后总有概率碰到那张图上浮一层的文字会看不到,所以加入文 ...