USACO 4 1 2 柵欄的木料

2022-06-01 10:18:08 字數 1231 閱讀 8400

這個講的超好....一定要看...然後看我**就好懂啦...

各種優化確實非常好....搜尋的一道好題...

掛**:

/*

problem : usaco 4.1.2 柵欄的木料

author : robert yuan

優化解釋:

0. 二分+貪心判斷可行解 (根據自己設計的貪心演算法盡量的得到乙個比較靠近正確值的 ans,再後面的搜尋的下界就會大大提高)

1. 如果使用的木料與上一塊的木料大小相同,那麼上一塊若沒有選前 i塊木板,這一塊也不要選(1.若是因為前面的太小而不選,那麼對於這個也太小 2.若是因為前面的情況已經搜過,那我選擇前面的就成了乙個已經搜尋過的情況)

2. 如果當前需要列舉的木板與上一塊木板的大小相同,只選其中最後的那塊,理由同上。

3. 如果剩下的木板大小比第一塊還小,那麼就是屬於餘料,將所有餘料和已經切好的木料減去,剩下的木板長度如果比未切好的 x個木料總長還要小,那麼這種狀態也是不可行的

*/#include

#include

#include

using

namespace

std;

inline

intin

()const

int maxn=52

;const

int maxm=1025

;const

int inf=0x7f7f7f7f

;int

n,m,s,ans;

inttmp[maxn];

inta[maxn],b[maxm],s[maxm];

bool cmp(const

int &a,const

int &b)

bool dfs(int x,int

last)

if(a[i]1]) s+=a[i];

a[i]+=b[x];}}

s+=b[x];

return

false;}

bool check(int m)

return

true;}

intmain()

while(l+1

ans=r;

while(dfs(ans,1) && ans<=m) ans++;

printf("%d

",ans-1

);

return0;

}

view code

USACO4 1 2 柵欄的木料 爆搜剪枝優化

executing.test 1 test ok 0.005 secs,3392 kb test 2 test ok 0.005 secs,3392 kb test 3 test ok 0.008 secs,3392 kb test 4 test ok 0.097 secs,3392 kb test...

USACO2 4 2 穿越柵欄

問題描述 fj搭建了乙個巨大的用柵欄圍成的迷宮。幸運的是,他在迷宮的邊界上留出了兩段柵欄作為迷宮的出口,並且從迷宮中的任意一點都能找到一條走出迷宮的路。給定迷宮的寬 w 及長 h 和這個迷宮,然後計算從迷宮中最 糟糕 的那乙個點走出迷宮所需的最少步數。輸入格式 第一行 w和h 用空格隔開 第二行至第...

USACO 2 4 2 穿越柵欄

問題描述 fj搭建了乙個巨大的用柵欄圍成的迷宮。幸運的是,他在迷宮的邊界上留出了兩段柵欄作為迷宮的出口,並且從迷宮中的任意一點都能找到一條走出迷宮的路。給定迷宮的寬 w 及長 h 和這個迷宮,然後計算從迷宮中最 糟糕 的那乙個點走出迷宮所需的最少步數。輸入格式 第一行 w和h 用空格隔開 第二行至第...