POJ 1062昂贵的聘礼
Dij
建立一个虚拟节点以建图.
那么虚拟节点到这些点的值就是初始购买值.
可替代物品直接建图即可,每次取min保证最小花费.
等级浮动只有100,直接从1号点的等级-m枚举,因为要保证能和1号点交换.
参考代码
#include<bits/stdc++.h>
#define re register
using namespace std;
typedef long long ll;
const double eps=1e-7;
const int INF=1e9;
const int N=105;
int n,m;
int x,y;
int cnt;
int tot;
int a,c;
int dis[N];
bool vis[N];
int level[N];
int Map[N][N];
inline int dij(int down,int up) {
memset(dis,0x3f,sizeof dis);
memset(vis,0,sizeof vis);
dis[0]=0;
for(int i=1; i<=n+1; ++i) {
int now=-1;
for(int j=0; j<=n; ++j) {
if(!vis[j]&&(now==-1||dis[now]>dis[j])) now=j;
}
vis[now]=1;
for(int j=1; j<=n; ++j) {
if(level[j]>=down&&level[j]<=up)
dis[j]=min(dis[j],dis[now]+Map[now][j]);
}
}
return dis[1];
}
int main() {
memset(Map,0x3f,sizeof Map);
scanf("%d%d",&m,&n);
for(int i=1; i<=n; ++i) {
scanf("%d%d%d",&a,&level[i],&cnt);
Map[0][i]=min(Map[0][i],a);
while(cnt--) {
scanf("%d%d",&x,&y);
Map[x][i]=min(Map[x][i],y);
}
}
int res=INF;
for(int i=level[1]-m; i<=level[1]; ++i) res=min(res,dij(i,i+m));
printf("%d",res);
}
作者:${\color{Violet}かの}$
-----若转载请附原作者名及原文链接-----
-----若转载请附原作者名及原文链接-----
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· C# 13 中的新增功能实操
· Ollama本地部署大模型总结
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(4)
· langchain0.3教程:从0到1打造一个智能聊天机器人
· 用一种新的分类方法梳理设计模式的脉络