給出一張有n個點和m條雙向邊的圖,要求求出1到n的次短路的長度。一條邊可以多次通過。
輸入格式:
第一行為兩個整數n和m。接下來的m行每行三個整數ai,bi,vi,分別表示這條路連著的兩個點和他的長度。
輸出格式:
乙個整數,表示次短路的長度。
樣例輸入
樣例輸出
4 41 2 100
2 4 200
2 3 250
3 4 100
樣例解釋:
最短:1->2->4。
次短:1->2->3->4。
資料範圍:
對於 100%的資料:1<=n、vi
<=5000,1<=m<=100000。
solution:
裸的不能再裸的最短路,但用spfa會被卡,就上dij**
#include#include#include
#include
using
namespace
std;
const
int maxn = 5000+100
; const
int inf = 0x7fffffff
; typedef pair
p;
struct
edge;
vector
g[maxn];
intn,m,ans;
intdis1[maxn],disn[maxn];
void dijkstra(int src,int
dis)
} }
} void
solve()
} } int
main()
solve();
printf(
"%d\n
",ans);
return
0;
}
lgl有一根長為n的木板。現在他想要把它砍成四段長度為整數的木板來做乙個四邊形,請問他有多少種不同的砍法?注意:四段長度為1、1、2、1和四段長度為1、2、1、1算兩種砍法。
輸入格式:
第一行為乙個整數 n,表示木板的長度。
輸出格式:
乙個整數,不同的砍法數量。
樣例輸入
樣例輸出
樣例解釋:
1122,1212,1221,2112,2121,2211。
資料範圍:
對於100%的資料:1<=n<=2500。
solution:
dp[i][j]表示長度為i時分成j段的方案數,隨便轉移。
這是正解,當然因為本題比較特殊,附上兩個暴力**。
正常暴力
#includeusingnamespace
std;
intmain()
printf(
"%lld\n
",sum);
}
優化暴力(from巨神lzb)
#includeusingnamespace
std;
intmain()
printf(
"%lld,
",ans);
} }
正解
#include #includeintn,mid;
int dp[2501][5
];int
getint()
while(ch>='
0'&&ch<='9'
)
return x*f;}
int min(int a,intb)
intmain()
}printf("%d
",dp[n][4
]);
return0;
}
yyh有n道題要做。但是由於他上課做某些事,導致他一題都不會做,只好請lgl代打。lgl為了買自己心愛的坦克,他做第i題要收兩筆錢:一筆在yyh叫他做題當天收,另外一筆在叫他做題的第二天收。yyh每天結束的時候都會把剩下的所有錢花光,然後再從父親lrb處得到m元零花錢用來請lgl做題(也就是說,第一天的時候yyh是沒有錢請lgl做題的,每一天用來請lgl做題所用的錢都是前一天lrb給的)。而且,yyh做的題目難度是循序漸進的:就算強如lgl,在做第i題之前也要先把第1到i-1題全部做完。請問yyh將所有題目做完並且把所有錢都付給lgl的最小天數。
輸入格式:
第一行為兩個整數m、n,接下來的n行每一行都有兩個數ai
和bi,分別表示lgl做第i題所收的兩筆錢。
輸出格式:
乙個整數,表示最小天數。
樣例輸入
樣例輸出
100 5
40 20
60 20
30 50
30 50
40 40
樣例解釋:
第二天做1、2兩題,第三天做3、4兩題,第五天做5。在第六天的時候所有錢都付完。
資料範圍:
對於100%的資料:1<=n<=300,1<=ai
、bi<=m<=1000。
solution:dp[i][j]表示前i天做了j題後該天可能剩下的最多的錢的數量。那麼dp[i][j]可以轉移到dp[i][j+1]、dp[i][j+2]……只要滿足剩下的錢不少於0並且下個月的錢夠還即可。同時可以算出dp[i+1][j+1],dp[i+1][j+2]……最後輸出滿足dp[i][m]存在值的最小i。
#include #include#define inf 0x3f3f3f3f
intn,m,t1,t2;
int a[301],b[301
];int dp[501][301
];int
getint()
while(ch>='
0'&&ch<='9'
)
return x*f;}
int max(int a,intb)
intmain()}}
i++;
}printf("%d
",i);
return0;
}
每天bbs都要從家裡經過城市中的一段路到學校刷五三。城市中一共有n個路口和m條雙向道路,每條雙向道路都連線著兩個路口ai
、bi且有一定的時間花費vi
。bbs家編號為1,學校編號為n。今天,bbs由於個人衛生症候群導致他很遲才離開家,他想用膜法改變k條道路的長度使通過其的時間花費vi
變為0。現在他問你改變道路長度之後他到學校的最小時間花費是多少?
輸入格式:
第一行為三個整數n、m、k,接下來的m行每行三個整數ai,bi,vi,分別表示這條路連著的兩個路口和通過其所用的時間。
輸出格式:
乙個整數,表示bbs到學校的最小時間花費。
樣例輸入
樣例輸出
4 4 1
1 2 10
2 4 10
1 3 1
3 4 100
樣例解釋:
更新3->4的道路,最短路線為1->3->4,用時為1+0=1。
資料範圍:
對於100%的資料:1<=n<=10000,1<=m<=50000,1<=k<=20,1<=vi
<=1000000。
#include #include#include
#include
#define inf 0x3f3f3f3f
struct
path
;struct
node
};std::vector
g[10001
];std::priority_queue
q;int
m,n,k,ans;
int dist[10001][21
];bool vis[10001][21
];int
getint()
while(ch>='
0'&&ch<='9'
)
return x*f;}
int min(int a,intb)
void
dij()
);
while(!q.empty()));}
if((!vis[t.to][t2+1])&&t21]>dist[t1][t2]));}
}}}
intmain()
); g[b].push_back((path));
}dij();
ans=inf;
for(int i=0;i<=k;i++) ans=min(ans,dist[n][i]);
printf("%d
",ans);
return0;
}
2020 03 14模擬賽16(第二題)
題目描述 fj想計算他的n 1 n 1000 只奶牛的名字的好聽度,每個奶牛的名字是乙個長度不超過1000的英文本母串。他建立了乙個好名字的集合,數量為m 1 m 100 每個好名字的長度不超過30,奶牛的名字中每包含乙個好名字 包含 不一定要求連續 那麼它的好聽度就加1。所有的名字都不區分大小寫,...
藍橋杯第二期模擬賽第十題
覺得網上的答案怪怪的 問題描述 小藍在乙個 n 行 m 列的方格圖中玩乙個遊戲。開始時,小藍站在方格圖的左上角,即第 1 行第 1 列。小藍可以在方格圖上走動,走動時,如果當前在第 r 行第 c 列,他不能走到行號比 r 小的行,也不能走到列號比 c 小的列。同時,他一步走的直線距離不超過3。例如,...
2020 02 13普及C組模擬賽6(第二題)
題目描述 農場主約翰養了兩群有世仇的牛,它們被稱為蒙塔戈斯家族和卡普魯特家族。蒙塔戈斯家族的成員,羅密歐,愛上了美麗的朱麗葉,但後者正好是卡普魯特家族的成員。羅密歐希望與朱麗葉約會,但不希望卡普魯特家族的其他成員發現 否則會有可怕的事情發生!羅密歐和朱麗葉希望在牧場柵欄邊一塊盡可能大的區域中相見,這...