三国志
来源:互联网 发布:淘宝1.9元包邮怎么赚钱 编辑:程序博客网 时间:2024/04/27 14:08
Dijkstra算法+01背包问题
# include <stdio.h>
# define MAX(a,b) (a)>(b)?(a):(b)
# define MIN(a,b) (a)<(b)?(a):(b)
# define N 102
# define S 1000001
void DJSTL();
char Flag[N];
int MAP[N][N],NUM[N],DP[S],s,n,m;
int main(){
int i,j,x,A,B,C;
//freopen("ABC.txt","r",stdin);
scanf("%d",&x);
while(x--){
scanf("%d%d%d",&s,&n,&m);
for(i=0,n++;i<n;i++) //初始化标志和图
{
Flag[i]=0;
for(j=0;j<n;j++)
MAP[i][j]=S;
}
while(m--){
scanf("%d%d%d",&A,&B,&C);//输入节点信息
MAP[B][A]=MAP[A][B]=MIN(MAP[A][B],C);
}
for(i=1;i<n;i++)
scanf("%d",&NUM[i]);
DJSTL();
for(i=1;i<n;i++)
for(j=s;j>=MAP[0][i];j--)
DP[j]=MAX(DP[j],DP[j-MAP[0][i]]+NUM[i]);
printf("%d\n",DP[s]);
while(s)DP[s--]=0;
}
return 0;
}
void DJSTL()
{
int i,j,k,L;
for(i=1;i<n;i++)
{
L=S;
for(j=1;j<n;j++)
{
if(Flag[j])continue;
if(L>MAP[0][j])
{
L=MAP[0][j];
k=j;
}
}
Flag[k]=1;
for(j=1;j<n;j++)
{
if(Flag[j])continue;
MAP[0][j]=MIN(MAP[0][j],L+MAP[k][j]);
}
}
}
运行结果:
- 三国志
- 三国志
- 三国志
- 三国志
- 三国志
- 三国志
- 三国志
- 三国志
- 三国志
- 三国志,陈寿评刘备
- 国产手机三国志
- 三国志9
- 三国志11
- NYOJ-三国志
- NYOJ203-三国志
- 作业 三国志
- 《三国志》裴注研究
- 日本:“三国志新闻”
- 3894: 文理分科
- selenium3.x系列篇之四-chromedriver
- Kafka学习整理五(Consumer配置)
- 100. Same Tree
- Android使用kotlin实现增量更新详细全过程
- 三国志
- Linux查看系统状态命令
- Markdown 语法说明(简体中文版)
- 优秀工具介绍之——Iconfont 阿里图标库
- linux下安装redis
- 机器学习
- 不容易系列之(3)—— LELE的RPG难题
- YARN工作原理
- git命令