日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

USACO2.1【bfs,排序,贪心,dfs,位运算】

發(fā)布時間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 USACO2.1【bfs,排序,贪心,dfs,位运算】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

開始刷USACO的題了。


正題

刷前必備技能:OI常識,bfs,dfs,位運算,基礎(chǔ)貪心,快速排序。


T1:城堡 TheCastleThe CastleTheCastle

評測記錄:
https://www.luogu.org/recordnew/lists?uid=52918&pid=P1457
之前寫過,詳見:
https://blog.csdn.net/Mr_wuyongcong/article/details/78937287


T2:順序的分數(shù) OrderedFractionsOrdered FractionsOrderedFractions

評測記錄:https://www.luogu.org/problemnew/show/P1458


題目大意

求最簡分數(shù)
ab(a,b&lt;=n,a,b∈N)\frac{a}{b}(a,b&lt;=n,a,b\in N)ba?(a,b<=na,bN)
從小到大輸出。


解題思路

暴力枚舉ab,gcd判斷最間,然后排序。


code

// luogu-judger-enable-o2 #include<cstdio> #include<algorithm> using namespace std; int n,tot; struct node{int a,b;double w; }a[10001]; bool cmp(node x,node y) {return x.w<y.w; } int main() {scanf("%d",&n);for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++)if(__gcd(i,j)==1) {a[++tot]=(node){i,j,(double)i/j};}//暴力枚舉sort(a+1,a+1+tot,cmp);//排序printf("0/1\n");for(int i=1;i<=tot;i++)printf("%d/%d\n",a[i].a,a[i].b);printf("1/1"); }

T3:三值的排序 SortingaThree?ValuedSequenceSorting a Three-Valued SequenceSortingaThree?ValuedSequence

評測記錄:https://www.luogu.org/recordnew/lists?uid=52918&pid=P1459


題目大意

1,2,3構(gòu)成的序列,要求至少多少次交換可以將其變?yōu)樯蛐蛄小?/p>


解題思路

我們考慮所以放錯位置的數(shù)。
如果3放在了1,2的位置上,那么就一定是需要一次交換的。如果1放在了2的位置或2放在了1的位置,那么可以選擇1放回去或2放回去,當然我們可以將錯的2和錯的1抵消所以答案就是
wrong3+max{wrong1,wrong2}wrong_3+max\{wrong_1,wrong_2\}wrong3?+max{wrong1?,wrong2?}


code

#include<cstdio> #include<algorithm> using namespace std; int n,a[1001],s,num[4],fail[4]; int main() {scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]),num[a[i]]++;for(int i=1;i<=num[1]+num[2];i++){if(a[i]==3) fail[3]++;//3放錯位置if(i<=num[1]&&a[i]==2) fail[2]++;//2放錯位置if(i>num[1]&&a[i]==1) fail[1]++;//1放錯位置}printf("%d",fail[3]+max(fail[1],fail[2])); }

T4:健康的荷斯坦奶牛 HealthyHolsteinsHealthy HolsteinsHealthyHolsteins

評測記錄:https://www.luogu.org/recordnew/lists?uid=52918&pid=P1460


題目大意

牛對于v種維生素有不同的需求,每包飼料含有不等量不同的維生素。求需要的最少飼料包數(shù)


解題思路

dfs暴搜


code

#include<cstdio> using namespace std; int v,n,mins,ans[30],h[30][30],use[30],ne[30],now[30]; bool check() {for(int i=1;i<=v;i++)if(now[i]<ne[i]) return false;return true; } void dfs(int dep,int c) {if(c>=mins||dep>n) return;if(check()){for(int i=1;i<=n;i++)ans[i]=use[i];mins=c;}use[dep+1]=1;for(int i=1;i<=v;i++)now[i]+=h[dep+1][i];dfs(dep+1,c+1);use[dep+1]=0;for(int i=1;i<=v;i++)now[i]-=h[dep+1][i];dfs(dep+1,c); } int main() {scanf("%d",&v);for(int i=1;i<=v;i++)scanf("%d",&ne[i]);scanf("%d",&n);for(int i=1;i<=n;i++)for(int j=1;j<=v;j++)scanf("%d",&h[i][j]);mins=2147483647;dfs(0,0);printf("%d ",mins);for(int i=1;i<=n;i++)if(ans[i]) printf("%d ",i); }

T5:海明碼 HammingCodesHamming CodesHammingCodes

評測記錄:https://www.luogu.org/recordnew/lists?uid=52918&pid=P1461


題目大意

求n個最小的非負整數(shù),要求每個數(shù)兩兩之間HammingHammingHamming距離(二進制位數(shù)不相同的個數(shù))。


解題思路

之接暴力過去枚舉數(shù),然后a?ba\bigoplus ba?b后統(tǒng)計1的個數(shù)就可以計算距離來判斷。


code

#include<cstdio> #include<algorithm> using namespace std; int n,b,d,now,last,tot,ans[100]; int main() {scanf("%d%d%d",&n,&b,&d);n--;tot=1;printf("0 ");ans[1]=0;while(n){now++;bool flag=true;for(int i=0;i<=tot;i++){if(__builtin_popcount(now^ans[i])<d){flag=false;break;}}//是否滿足要求if (flag){printf("%d ",now);ans[++tot]=now;if(tot%10==0) printf("\n");n--;}} }

總結(jié)

以上是生活随笔為你收集整理的USACO2.1【bfs,排序,贪心,dfs,位运算】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。