P1875 佳佳的魔法药水
P1875 佳佳的魔法藥水
題目描述
發(fā)完了 k 張照片,佳佳卻得到了一個壞消息:他的 MM 得病了!佳佳和大家一樣焦急 萬分!治好 MM 的病只有一種辦法,那就是傳說中的 0 號藥水 ……怎么樣才能得到 0 號藥 水呢?你要知道佳佳的家境也不是很好,成本得足夠低才行……
題目描述:
得到一種藥水有兩種方法:可以按照魔法書上的指導自己配置,也可以到魔法商店里去
買——那里對于每種藥水都有供應,雖然有可能價格很貴。在魔法書上有很多這樣的記載:
1 份 A 藥水混合 1 份 B 藥水就可以得到 1 份 C 藥水。(至于為什么 1+1=1,因為……這是魔
法世界)好了,現(xiàn)在你知道了需要得到某種藥水,還知道所有可能涉及到的藥水的價格以及
魔法書上所有的配置方法,現(xiàn)在要問的就是:1.最少花多少錢可以配制成功這種珍貴的藥水;
2.共有多少種不同的花費最少的方案(兩種可行的配置方案如果有任何一個步驟不同則視為 不同的)。假定初始時你手中并沒有任何可以用的藥水。
輸入輸出格式
輸入格式:?
第一行有一個整數(shù) N,表示一共涉及到的藥水總數(shù)。藥水從 0~N-1 順序編號,0 號藥水就是 最終要配制的藥水。
第二行有 N 個整數(shù),分別表示從 0~N-1 順序編號的所有藥水在魔法商店的價格(都表示 1 份的價格)。
第三行開始,每行有 3 個整數(shù) A、B、C,表示 1 份 A 藥水混合 1 份 B 藥水就可以得到 1 份 C 藥水。注意,某兩種特定的藥水搭配如果能配成新藥水的話,那么結果是唯一的。也就是 說不會出現(xiàn)某兩行的 A、B 相同但 C 不同的情況。
輸入以一個空行結束。
?
輸出格式:?
輸出兩個用空格隔開的整數(shù),分別表示得到 0 號藥水的最小花費以及花費最少的方案的個
數(shù)。
?
輸入輸出樣例
輸入樣例#1:7 10 5 6 3 2 2 3 1 2 0 4 5 1 3 6 2 輸出樣例#1:
10 3
說明
樣例說明:
最優(yōu)方案有 3 種,分別是:直接買 0 號藥水;買 4 號藥水、5 號藥水配制成 1 號藥水,直接 買 2 號藥水,然后配制成 0 號藥水;買 4 號藥水、5 號藥水配制成 1 號藥水,買 3 號藥水、6 號藥水配制成 2,然后配制成 0。
思路:dijstra
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define MAXN 1010 using namespace std; int n,x,y,z,tot; int map[MAXN][MAXN]; int dis[MAXN],vis[MAXN],ans[MAXN]; void dijstra(){for(int i=1;i<=n;i++){int best,maxn=0x7f7f7f7f;for(int j=1;j<=n;j++)if(!vis[j]&&dis[j]<maxn){best=j;maxn=dis[j];}if(maxn==0x7f7f7f7f) break;vis[best]=1;for(int j=1;j<=n;j++)if(map[best][j]!=0&&vis[j]&&dis[map[best][j]]>dis[j]+maxn){dis[map[best][j]]=dis[j]+maxn;ans[map[best][j]]=ans[best]*ans[j];}else if(map[best][j]!=0&&vis[j]&&dis[map[best][j]]==dis[j]+maxn){ans[map[best][j]]+=ans[best]*ans[j];}} } int main(){scanf("%d",&n);tot=3;for(int i=1;i<=n;i++)scanf("%d",&dis[i]);for(int i=1;i<=n;i++) ans[i]=1;while(scanf("%d%d%d",&x,&y,&z)!=EOF)map[x+1][y+1]=map[y+1][x+1]=z+1,tot--;dijstra();cout<<dis[1]<<" "<<ans[1]; }?
轉載于:https://www.cnblogs.com/cangT-Tlan/p/7667813.html
總結
以上是生活随笔為你收集整理的P1875 佳佳的魔法药水的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: The SwiftProgramming
- 下一篇: 全面认识二极管,一篇文章就够了
