這個講的超好....一定要看...然後看我**就好懂啦...
各種優化確實非常好....搜尋的一道好題...
掛**:
/*view codeproblem : 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;
}
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 用空格隔開 第二行至第...