這題的 dp 還是比較顯然的
聽說是個完全揹包,大概轉移是差不多的
就從當前層順著列舉 j 往大去更新同層的就好了
其實這樣每次往高處轉移的就是下面的字首最小值
值得注意的是題意要模擬的是遊戲
所以顯然不能先掉下去在在同一步中往上飛
所以轉移順序是不能亂的
就是先轉移往上飛的在轉移往下掉的
好像多開一維也行,不過沒有必要了
**:
#include #include #include #include #include #include #include using namespace std;const int max_n = 10005, max_m = 1005;
int n, m, k, max_dst;
int x[max_n], y[max_n], pos[max_n], pre_sum[max_n];
int bot[max_n], top[max_n], f[max_n][max_m];
bool has_stk[max_n];
int main()
for (int i = 1; i < n; ++i) pre_sum[i] = pre_sum[i - 1] + has_stk[i];
memset(f, 0x3f, sizeof(f));
for (int i = 1; i <= m; ++i) f[0][i] = 0;
for (int i = 1; i <= n; ++i)
for (int j = m - x[i]; j <= m; ++j)
for (int j = 1; j <= m - y[i]; ++j)
if (has_stk[i])
}register int min_res = 0x3f3f3f3f;
if (!has_stk[n])
} else
}if (max_dst == n) else
return 0;
}
luogu 1941 飛揚的小鳥
這道題對於第13個資料點,不知為什麼f陣列第二位開到2000以下就不能過,求指教 傳送門 乙個小鳥在 n m 的方陣裡,然後有許多管道你們玩過就不多介紹了,然後每乙個位置,點選會上公升,不點選可以下降,點選效果可以疊加。求如果通關的最小點選次數,否則會最多通過多少個管道。就是搜尋,本以為會拿50pt...
Luogu 飛揚的小鳥
bfs or dp include using namespace std const int n 1e4 10 define gc getchar define oo 99999999 struct node 1 p n struct node 2 m n struct node intn,m,k...
P1941 飛揚的小鳥
定義dp i j 表示走到座標 i,j 時的最小點按次數。考慮遞推關係,能走到座標 i,j 一種情況是從前乙個位置下降上公升的轉移是乙個完全揹包,下降是01揹包。include using namespace std define ll long long define inf 0x3f3f3f d...