USACO2 1 解題報告

2022-09-03 04:33:11 字數 3439 閱讀 6774

usaco2.1主要內容是圖論。其中有幾道題是要用深搜做的。而另外幾道題則是利用模擬的方法來完成簡單圖論。

總體來說難度還是比較小的,算是最基礎的演算法吧。

uasco:

題解思路:

可以列舉分子和分母,然後判斷他們的最小公約數是不是1

1(其實就是判斷是否互質)。如果是的話就將這個分數加入到結構體裡面,儲存三個變數:

然後按照分數值排序輸出即可。

**:

/*

id:ssl_zyc2

task:frac1

lang:c++

*/#include

#include

using

namespace std;

int n,sum;

struct node

a[160

*160+10

];bool

cmp(node x,node y)

intmain()

sort

(a+1

,a+1

+sum,cmp)

;//排序

for(

int i=

1;i<=sum;i++

)printf

("%d/%d\n"

,a[i]

.z,a[i]

.m);

return0;

}

思路:

這道題有點噁心。

讀入a[i]

a[i]

,將a[i]

a[i]

排好序後為b[i

]b[i

],然後從前往後掃,如果a[i

]!=b

[i]a

[i]!

=b[i

]就說明這個a[i

]a[i

]的位置是錯誤的。那麼要分情況。

先到a[i]

a[i]

本來應該在的位置,如果這個位置中有為本來應該在a[i]位置的數字,那麼就交換兩個數字,一次交換就滿足了兩個數字。

如果這個位置中沒有為本來應該在a[i]位置的數字,那麼就隨便找乙個要到a[i

]a[i

]位置來的數字交換,一次交換只滿足了乙個數字。

模擬即可。

**:

/*

id:ssl_zyc2

task:sort3

lang:c++

*/#include

#include

using

namespace std;

int n,a[

1010

],b[

1010

],cnt;

bool ok;

intmain()

sort

(b+1

,b+1

+n);

for(

int i=

1;i<=n;i++)if

(a[i]

!=b[i]

)//不相同if(

!ok)

//情況2

for(

int j=n;j>i;j--)if

(a[j]

==b[i])}

printf

("%d\n"

,cnt)

;return0;

}

思路:

深搜列舉每乙個飼料,判斷買或者不買。最終取答案最小值即可。

當然如果你英勇一點的話就隨機選擇那些飼料,多隨機幾次取最有答案。如果運氣好的話應該也是可以過的。

**:

#include

#include

using

namespace std;

int n,m,need[30]

,sum[30]

,f[20][

30],used[30]

;struct node

ans;

bool

check

(int k)

void

dfs(

int x,

int s)

return;}

dfs(x+

1,s)

; used[s+1]

=x;for

(int i=

1;i<=n;i++

) sum[i]

+=f[x]

[i];

dfs(x+

1,s+1)

; used[s+1]

=0;for

(int i=

1;i<=n;i++

) sum[i]

-=f[x]

[i];

}int

main()

//我這種方法很麻煩,應該有更簡單的方法的。

思路:

深搜列舉每一位數是0

0還是1

1,搜完乙個答案後將它和前面的所有答案進行比較,如果都滿足要求就記錄下這個答案。最後輸出時再轉換成十進位制即可。

**:

/*

id:ssl_zyc2

task:hamming

lang:c++

*/#include

using

namespace std;

int n,m,k,ans[70]

[10],a[10]

,sum;

void

check()

sum++

;for

(int i=

1;i<=m;i++

) ans[sum]

[i]=a[i]

;//記錄答案

}void

dfs(

int x)

dfs(x+1)

;//這一位是0

if(sum>=n)

return

; a[x]=1

;dfs

(x+1);

//這一位是1

if(sum>=n)

return

; a[x]=0

;}intmain()

if(i%

10==1)

printf

("%d"

,s);

else

if(i%

10==0)

printf

(" %d\n"

,s);

else

printf

(" %d"

,s);

//usaco神奇的輸出要求}if

(n%10

)printf

("\n");

//usaco神奇的輸出要求(末尾必須換行)

return0;

}

USACO 2 1 順序的分數

description 輸入乙個自然數n 請寫乙個程式來增序輸出分母小於等於n的最簡真分數 input 單獨的一行 乙個自然數n 1.160 output 每個分數單獨佔一行 最後一行有回車 sample input 5 sample output 0 1 1 5 1 4 1 3 2 5 1 2 3...

USACO 2 1 健康的好斯坦奶牛 DFS

description 農民john以擁有世界上最健康的奶牛為驕傲。他知道每種飼料中所包含的的牛所需的最低的維他命量是多少。請你幫助農夫餵養他的牛,以保持他們的健康,使餵給牛的飼料的種數最少。給出牛所需的最低的維他命,輸出餵給牛需要哪些種類的飼料,且所需的種類數最少。input 第1行 乙個整數v ...

USACO 2 1 健康的好斯坦奶牛 DFS

description 農民john以擁有世界上最健康的奶牛為驕傲。他知道每種飼料中所包含的的牛所需的最低的維他命量是多少。請你幫助農夫餵養他的牛,以保持他們的健康,使餵給牛的飼料的種數最少。給出牛所需的最低的維他命,輸出餵給牛需要哪些種類的飼料,且所需的種類數最少。input 第1行 乙個整數v ...