考試總結
晚上打了場cf,早上有點瞌睡,狀態不太好。
t1 音量調節
12年河南省選題,洛谷難度普及–,我覺著還好,看出來是dp,但沒想到後面都是dp,這道題我的思路就是用乙個f[i][[j]去進行乙個可行性的計算,從大的往小的,從後往前,如果f[i-1][j+a[i]]或f[i-1][j-a[i]滿足條件,就對f[i][j]進行更新,最後的話從大到小把f[n][i]掃瞄一下,找到最大的值,直接輸出,結束程式。
題目和**如下
題目描述音量用乙個整數描述。輸入檔案中給定整數beginlevelbeginlevel,代表吉他剛開始的音量,以及整數maxlevelmaxlevel,代表吉他的最大音量。音量不能小於00也不能大於maxlevelmaxlevel。輸入檔案中還給定了nn個整數c1c1,c2c2,…,cncn,表示在第ii首歌開始之前吉他手想要改變的音量是多少。
吉他手想以最大的音量演奏最後一首歌,你的任務是找到這個最大音量是多少。
輸入格式
第一行依次為三個整數:nn, beginlevelbeginlevel, maxlevelmaxlevel。
第二行依次為n個整數:c1c1,c2c2,…,cncn。
輸出格式
輸出演奏最後一首歌的最大音量。如果吉他手無法避免音量低於00或者高於maxlevelmaxlevel,輸出−1−1。
樣例資料
input1
3 5 10
5 3 7
output1
10input2
4 8 20
15 2 9 10
output2
-1資料規模與約定
1≤n≤50,1≤ci≤maxlevel1≤ci≤maxlevel, 0≤beginlevel≤maxlevel。
時間限制:1s1s
空間限制:256mb
#include
using
namespace std;
int a[51]
;int f[51]
[1001];
intmain()
if(j+a[i]
<=y)}}
for(
int i=y;i>=
1;i--)}
puts
("-1");
return0;
}
t2配對
這道題是乙個狀態壓縮dp,但是我覺得自己可能調不出來,就先去寫後面的題了,最後這道題寫了個暴力,騙了點分,把我騙分的思路寫一下吧。
首先,裡面肯定有和樣例一樣,每個人只有乙個人能和他配對,所以統計的時候我們記錄一下1出現的數量,判斷其是否等於n,如果是直接輸出-1.
之後的話又寫了個分段,小資料的幾組都水過去了,狀態壓縮dp還不是特別熟,還要再看看。
騙分**就不粘了,等我看完正解再來完善一下。
t3補兵
看出來是一道dp,但是狀態都不會設,沒辦法了,那就只能接著暴力了唄,每一秒都對陣列裡存的元素操作,統計一下最後能搶到多少,時間肯定會超,但部分分還是能拿的。
t3正解:
首先我們要先清楚乙個墊刀的概念(不打遊戲的也能推出來),也就是說,我們要盡量讓小兵的血量呈現乙個階梯狀,這樣我們就可以補到更多的兵,為了使血量呈現階梯狀而補的刀就叫做墊刀,所以我們可以先對每乙個位置做乙個預處理,找一下最近的位置要墊多少刀 ,用陣列存起來,後面做乙個dp,具體狀態轉移看**吧。
題面
對於乙個dota玩家,補兵個數(creep score)是衡量一名選手能力的重要指標,特別是打路人局的時候,補兵能力就更加關鍵了,因為常常會有隊友和你搶補刀,比如,隊友操控的老鹿在開大收兵,如果你操控的是幽鬼,就需要在老鹿的aoe中偷偷補上幾刀來保證自己的發育。
我們自己建立乙個模型來大致模擬以下情況:
現在有n個小兵,每個小兵有自己的血量ai(血量一定是正整數),你和老鹿輪流對小兵進行攻擊。每次,你可以選擇對某個小兵造成1點傷害(或者你可以選擇不作為),接著,老鹿會對所有小兵造成1點aoe傷害,如此往復,直到所有小兵都死亡(血量變成0)。如果你對某個小兵造成致命傷害(使他的血量從1變成0).那麼你就補刀成功了!
對於給定的情形,你需要計算你最多可以補刀多少的小兵。
輸入格式
本題有多組測試資料,第一行為乙個整數tt,表示測試組數。 對於每一組資料,第一行乙個整數nn,表示小兵的個數,隨後第二行nn個正整數,表示每個小兵的血量。
輸出格式
對於每一組資料,輸出乙個整數m,表示補兵的最大數量。
資料規模
對於30%30%的資料,n≤100n≤100。 對於50%50%的資料,n≤500n≤500,t≤30t≤30,ai≤500ai≤500。 對於100%100%的資料,1≤n≤5001≤n≤500,1≤t≤701≤t≤70,1≤ai≤10001≤ai≤1000。
**如下
#include
using
namespace std;
const
int n=
1000+10
;int a[n]
,cnt[n]
,c[n]
,sta[n]
,f[n]
[n];
intmain()
int top=0;
for(
int i=
1;i<=ma;i++
) c[i]=0
;}}int ans=0;
for(
int i=
1;i<=ma;i++
) ans=
max(ans,f[i]
[j]);}
} cout<}return0;
}
t4 蜘蛛棋盤
這道題可以不用dp來做,但是我考試時推錯了,下面說一下正確的。
首先mn<40,m,n可以互換,所以n最大也就是6,(66=36)也就是說我們只需要考慮6種情況即可,然後對每一種情況進行分別計算
具體題目和**如下
題目描述
在乙個 n×mn×m 的棋盤上,第一天每乙個格仔上都有乙個蜘蛛。
在第一天裡每乙隻蜘蛛都可以 向上 或 向下 或 向左 或 向右 爬行 一格(不能走出棋盤); 或者待在原地不動。 多隻蜘蛛可以爬行到同乙個格仔中。
通過第一天爬行後,第二天棋盤上出現了一些空的(沒有蜘蛛的)格仔。問,第二天棋盤上最多可以空出多少個格仔?
輸入格式
一行,兩個正整n,mn,m 。
輸出格式
一行,乙個非負整數,表示最多能空出的格仔數。
樣例
輸入樣例1
1 1輸出樣例1
0輸入樣例2
2 3輸出樣例2
4資料範圍與提示
對於 20% 的資料,n=1 。
對於 50% 的資料,n≤3 。
對於 100% 的資料,1≤n,m≤40。
#include
using
namespace std;
intmain()
t5的話考試沒太仔細看,是一道樹上的dp,待完善 測試次數 (dp
x星球的居民脾氣不太好,但好在他們生氣的時候唯一的異常舉動是 摔手機。各大廠商也就紛紛推出各種耐摔型手機。x星球的質監局規定了手機必須經過耐摔測試,並且評定出乙個耐摔指數來,之後才允許上市流通。x星球有很多高聳入雲的高塔,剛好可以用來做耐摔測試。塔的每一層高度都是一樣的,與地球上稍有不同的是,他們的...
DP基礎(線性DP)總結
前言 雖然確實有點基礎.但凡事得腳踏實地地做,基礎不牢,地動山搖,嗯!dp方程 dp i max 複雜度 o n 2 法一 資料結構無腦暴力優化 以a i 為陣列下標,從1到a i 訪問最大值,再加一,進行更新 法二 設h k 表示dp值為k的最長上公升子串行的最小值 有點貪心在裡面 顯然h k h...
樹形dp總結
from 列出一些經典問題吧 1 給出一棵樹 每個節點有權值 要求父節點和子節點不能同時取 求能夠取得的最大值 hdu1520 2 給出一棵樹,求離每個節點最遠的點的距離 hdu2196 3 1 在乙個地圖上,有n座城堡,每座城堡都有一定的寶物,在每次遊戲中允許攻克m個城堡並獲得裡面的寶物。但由於地...