題意:一堆管子,問怎麼用最少點選次數穿出去。
就是個裸揹包啊……優化都沒有……
另外這份**在$uoj$上被$hack$了,有沒有某位$dalao$幫忙找找問題……
1 #include2 #include3 #include4 #include5cogs1805using
namespace
std;
6const
int maxn=10000+5,maxm=1000+5,inf=0x3f3f3f3f;7
intx[maxn],lowe[maxn],uppe[maxn],y[maxn],cnt[maxn][maxm],n,m,k;
8int
haha()
919 cnt[0][0]=inf;
20int done=0;21
int minn=inf;bool ok=0;22
for(int i=1;i<=n;i++)
2334
if(minn1;35
}36for(int j=lowe[i]+1;j)
37if(j+y[i-1]1]&&cnt[i-1][j+y[i-1]]1][j+y[i-1]],ok=1;38
for(int j=0;j<=lowe[i];j++)cnt[i][j]=inf;
39if(uppe[i]>m)
4046
if(cnt[i][m]1;47
}48if(!ok)
4953
if(uppe[i]!=m+1)done++;54}
55 minn=inf;
56for(int i=lowe[n]+1;imin(minn,cnt[n][i]);
57 printf("
1\n%d\n
",minn);58}
59int sb=haha();
60int main()
(臥槽第一篇寫了博的dp)
飛揚的小鳥
顯然的思路,用網路流做。對每個洞拆點,i.j表示第i個洞被通過這個洞的倒數第j隻鳥通過。然後連邊跑費用流。然而邊數太多直接 怎麼辦?注意到i.j沒被流i.j 1就絕不可能被流。因此動態加邊,初始只連所有到x.1的。目前連到x.y,流成功一次加上所有到x.y 1的邊。然後莫名很慢,所以這裡本辣雞加上了...
飛揚的小鳥
飛揚的小鳥 這一題開始看到時就知道是dp,但作死打了個dfs,只有75分 卡常 好 includeusing namespace std const int n 10005 const int inf 9999999 int g sum n g up n g down n up n down n n...
飛揚的小鳥
首先這道題爆搜可做,理論上可以拿50分的,但由於windows下棧空間只有3w多,所以只能拿到35分。然後我們考慮dp 應該很容易想到是dp 定義狀態f i j 為在點 i,j 時最少的觸屏次數,然後列舉觸屏次數轉移即可。這樣複雜度是o nm 2 可以拿70分,但這裡很容易犯的的乙個錯誤就是當在螢幕...