SDUT 2012省賽選拔賽3

2022-05-24 02:30:12 字數 1951 閱讀 7698

1001:將乙個數轉化成-2進製的數,同樣對這個數模-2倒取於,分清正數與負數,兩種不同的情況;

view code

1002:dfs;給的資料很小所以暴力就可以過,首先求出n個字串的全排列,然後檢查是否可以連線,求最後的長度,列舉出最小的值。在這裡又犯了個不可原諒的小錯誤。。唉。細心。。

view code

1003:字典樹;每個點減去空格的assic碼,(應為空格的asiic嗎最小),然後插入,查詢。

view code

1004:貪心;可以想象成上公升沿與下降沿,求頂峰的值,中間的細節也要注意。

view code

1005:dp: 自己對dp的感覺實在是膚淺,以後要加強對dp的練習,虎哥給講的:因為要盡量保持牛與牛之間的距離最大並且移動步數最少且牛語牛之間的距離去所以第一頭牛肯定在0位置,第n頭牛在l位置。 dp[i][j]表示將第i頭牛放在第j個位置後整個過程一共移動了多少步(包括1,2,....i - 1的移動步數),

然後有dp[i][j] = dp[i - 1][j - d] + abs(pos[i] - j) 如果可以取d +1 則又有 dp[i][j] = min(dp[i - 1][j] ,dp[i - 1][j - d1] + abs(pos[i] - j))

view code

#include #include 

#include

#include

#define maxn 100005

#define inf 99999999

using

namespace

std;

int dp[2

][maxn],pos[maxn];

intn,l;

intd,d1;

void getlr(int pos,int &l,int &r)

else

}int

main()

d = l/(n - 1

);

if (l%(n - 1) == 0) d1 = -1;//

如果不能整除

else d1 = d + 1

; dp[

1][0] = abs(pos[1] - 0);//

首先求出第一頭牛移動的步數

intl,r;

for (i = 2; i <= n; ++i)

if (i > 3)//

例如求4時,求2的構成會對4的一些長生影響,}}

printf(

"%d\n

",dp[n%2

][l]);

return0;

}

1006:dfs:列舉每個碗的狀態,要麼是1,要麼是0,中間自己出了乙個很傻比的錯誤,哎》不夠細心啊。

view code

#include #include 

#include

#include

#define maxn 22

using

namespace

std;

inta[maxn];

intb[maxn];

intans;

bool

isok()

return

true;}

void change(int

x)void dfs(int num,int

ct)

if (ct > ans) return

;

if (num >= 20) return

;

for (int i = 0; i < 2; ++i)

else

}}int

main()

for (i = 0; i < 2; ++i)

else

}printf(

"%d\n

",ans);

}

SDUT 2012省賽選拔賽3

1001 將乙個數轉化成 2進製的數,同樣對這個數模 2倒取於,分清正數與負數,兩種不同的情況 1002 dfs 給的資料很小所以暴力就可以過,首先求出n個字串的全排列,然後檢查是否可以連線,求最後的長度,列舉出最小的值。在這裡又犯了個不可原諒的小錯誤。唉。細心。1003 字典樹 每個點減去空格的a...

SDUT 2012省賽選拔賽1

a bfs 優先佇列。第一天只能感染defence小於等於1的並且與之連線的機器,第二天只能感染defence小於等於2的並且與之連線的機器.依次往後推。include include include include define maxn 505 using namespace std int g...

SDUT 2012省賽選拔賽1

a bfs 優先佇列。第一天只能感染defence小於等於1的並且與之連線的機器,第二天只能感染defence小於等於2的並且與之連線的機器.依次往後推。view code include include include include define maxn 505 using namespace...