P1476 休息中的小呆
P1476 休息中的小呆
题目描述
当大家在考场中接受考验(折磨?)的时候,小呆正在悠闲(欠扁)地玩一个叫“最初梦想”的游戏。游戏描述的是一个叫pass的有志少年在不同的时空穿越对抗传说中的大魔王chinesesonic的故事。小呆发现这个游戏的故事流程设计得很复杂,它有着很多的分支剧情,但不同的分支剧情是可以同时进行的,因此游戏可以由剧情和剧情的结束点组成,某些剧情必须要在一些特定的剧情结束后才能继续发展。为了体验游戏的完整性,小呆决定要看到所有的分支剧情——完成所有的任务。但这样做会不会耽误小呆宝贵的睡觉时间呢?所以就请你来解决这个问题了。
输入输出格式
输入格式:
小呆会给你一个剧情流程和完成条件的列表,
其中第一行有一个数n(0<n<100),表示总共有n个剧情结束点,
第二行一个数m(0<m<=120),表示有m个不同的剧情,
下面的m行中每行有三个数i(0<i<=100),j(0<j<=100),k(0<k<=1000),表示从剧情结束点i必须完成一个耗费时间为k的剧情才能到达剧情结束点j。
输出格式:
你要告诉小呆完成整个游戏至少需要多少时间以及要经过的所有可能的剧情结束点(按升序输出)。
输入输出样例
输入样例#1:
4 5 1 2 2 2 3 2 3 5 3 1 4 3 4 5 3
输出样例#1:
7 1 2 3 5
这里是求最长路并且结点个数+1
1、存储图:看数据量,这里是100,邻接矩阵
2、floyed优化:I,j,k不等并且用来dp的值有值
3、输出优化点:更新过别人的点
1 #include <bits/stdc++.h> 2 const int N=1e2+10; 3 using namespace std; 4 int dp[N][N],n,m; 5 6 int main(){ 7 //freopen("in.txt","r",stdin); 8 cin>>n>>m; 9 for(int i=1;i<=m;i++){ 10 int u,v,w; 11 cin>>u>>v>>w; 12 dp[u][v]=w; 13 } 14 for(int k=1;k<=n+1;k++){ 15 for(int i=1;i<=n+1;i++){ 16 for(int j=1;j<=n+1;j++){ 17 if(i!=j&&j!=k&&dp[i][k]&&dp[k][j]){ 18 dp[i][j]=max(dp[i][j],dp[i][k]+dp[k][j]); 19 } 20 } 21 } 22 } 23 cout<<dp[1][n+1]<<endl; 24 for(int k=1;k<=n+1;k++){ 25 if(dp[1][n+1]==dp[1][k]+dp[k][n+1]) 26 cout<<k<<" "; 27 } 28 cout<<endl; 29 return 0; 30 }
版权申明:欢迎转载,但请注明出处
一些博文中有一些参考内容因时间久远找不到来源了没有注明,如果侵权请联系我删除。
在校每年国奖、每年专业第一,加拿大留学,先后工作于华东师范大学和香港教育大学。
2024-10-30:27岁,宅加太忙,特此在网上找女朋友,坐标上海,非诚勿扰,vx:fan404006308
AI交流资料群:753014672