題目背景
noip1996提高組第三題
題目描述
在乙個地圖上有n個地窖(n<=20),每個地窖中埋有一定數量的地雷。同時,給出地窖之間的連線路徑。當地窖及其連線的資料給出之後,某人可以從任一處開始挖地雷,然後可以沿著指出的連線往下挖(僅能選擇一條路徑),當無連線時挖地雷工作結束。設計乙個挖地雷的方案,使某人能挖到最多的地雷。
輸入輸出格式
輸入格式:
輸入檔案mine.in有若干行。
第1行只有乙個數字,表示地窖的個數n。
第2行有n個數,分別表示每個地窖中的地雷個數。
第3行至第n+1行表示地窖之間的連線情況:
第3行有n-1個數(0或1),表示第乙個地窖至第2個、第3個、…、第n個地窖有否路徑連線。如第3行為1 1 0 0 0 … 0,則表示第1個地窖至第2個地窖有路徑,至第3個地窖有路徑,至第4個地窖、第5個、…、第n個地窖沒有路徑。
第4行有n-2個數,表示第二個地窖至第3個、第4個、…、第n個地窖有否路徑連線。
第n+1行有1個數,表示第n-1個地窖至第n個地窖有否路徑連線。(為0表示沒有路徑,為1表示有路徑)。
輸出格式:
輸出檔案wdl.out有兩行資料。
第一行表示挖得最多地雷時的挖地雷的順序,各地窖序號間以乙個空格分隔,不得有多餘的空格。
第二行只有乙個數,表示能挖到的最多地雷數。
輸入輸出樣例
輸入樣例#1: 複製
5 10 8 4 7 6
1 1 1 0
0 0 0
1 1
1 輸出樣例#1: 複製
1 3 4 5
27動規,dp[i]表示到i點最大地雷數。
轉移方程:if(vis[i][j]]) dp[i]=dp[j]+a[i]。a代表權值。
#include
using
namespace
std;
const
int maxn=25; //fa陣列表示雷最大時時的路徑,不斷更新。
int n,dp[maxn],a[maxn],fa[maxn],mx=-1; //a陣列表示每個地點埋的地雷。
bool vis[maxn][maxn]; //表示某兩點是否連通。
int main()
dp[n]=a[n];
for(register
int i=n-1;i>=1;i--)
}dp[i]=l+a[i];
fa[i]=k;
}int k=1;
for(register
int j=2;j<=n;j++)
if(dp[j]>dp[k]) k=j;
int ans=dp[k];
while(k!=0)
printf("\n");
printf("%d",ans);
return
0;}
NOIP 1998 提高組 複賽 車站
noip 1998 提高組 複賽 車站 1.題意很快看懂,但第二站上車人數怎麼求?2.突然想到,第二站上車人數可以採用列舉的方法求出,這一點跟筆算有很大不同。3.輸出時,考慮了幾個問題,x 1,x 2,x n都需單獨列出。4.3 x n 1根據列舉進行計算。5.編好 樣例通過,提交ac。6.本題收穫...
Noip1998 提高組3 盧斯加法表
著名科學家盧斯為了檢查學生對進製的理解,他給出了如下的一張加法表,表中的字母代表數字。例如 其含義為 l l l,l k k,l v v,l e e k l k,k k v,k v e,k e kl e e kv 根據這些規則可推導出 l 0,k 1,v 2,e 3 無關,就這個意思 同時可以確定該...
20200721NOIP提高組模擬T3 最小代價
給你n個點 n leq100000 所構成的邊帶權的無向圖,每個點都有黑或白兩種顏色之一,其中黑記為1,白記為0.現在要你選擇一些邊 選擇一條邊的代價即為此邊權值 用這些邊構成新的圖,使得新圖中每個白點都與黑點聯通,且每個白點到距離其最近的黑點的距離等於原圖中的最短距離.若不存在這樣的圖,輸出imp...