USACO-Section2.1 Healthy Holsteins (深度优先搜索)
生活随笔
收集整理的這篇文章主要介紹了
USACO-Section2.1 Healthy Holsteins (深度优先搜索)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2017-8-15
題目描述
1.喂給牛的飼料的種數最少 2.所需的飼料劑量最少 3.輸出飼料序號最小的解答
我用的是dfs求出所有情況 1.最大種數從1開始到n,若當前種數有滿足條件的,就是他了,break即可 2.每次k從1開始為了節省數組r的空間 3.set函數!!!代碼
/* ID: 18795871 PROG: holstein LANG: C++ */ #include<iostream> #include<fstream> #include<cstring> using namespace std; const int M = 25,N = 15;ifstream fin("holstein.in"); ofstream fout("holstein.out");int x[M+1],y[N+1][M+1]; //init int s[M+1]; //sum:now int r[10000][N+1]; //type:now bool f[N+1],res=false; int now,m,n,sum=0,k=1,qq;bool flag(){ //判斷當前是否符合條件for (int i=1;i<=m;i++){if (s[i]<x[i]) return false;}return true; }int fun(){ //求出當前所需的飼料劑量int res=0;for (int i=1;i<=m;i++){res+=s[i];}return res; }void cal(int j){ for (int i=1;i<=m;i++){s[i]+=y[j][i];} }void mul(int j){ for (int i=1;i<=m;i++){s[i]-=y[j][i];} }void set(int p){for (int i=1;i<=k;i++){for (int j=0;j<p;j++){if (!r[i][j]){r[i][j]=r[i-1][j];}}} }void dfs(int step,int cnt){if (step==n+1){k++;return ;}if (cnt==now){set(cnt);if (flag()){int fun_res=fun();if (sum==0||(sum!=0&&fun_res<sum)){qq=k;sum=fun_res;}res=true;}k++;return ;}for (int i=step+1;i<=n;i++){if (!f[i]){cal(i);r[k][cnt]=i;f[i]=true;dfs(i,cnt+1);f[i]=false;mul(i);}} }void show(int p){int i;fout<<now<<" ";for (i=0;i<now-1;i++){fout<<r[p][i]<<" ";}fout<<r[p][i]<<endl; }int main() {int i,j;fin>>m;for (i=1;i<=m;i++){fin>>x[i];}fin>>n;for (i=1;i<=n;i++){for (j=1;j<=m;j++){fin>>y[i][j];}}for (i=1;i<=n;i++){if (res) break;now=i;k=1;memset(s,0,sizeof(s));memset(f,false,sizeof(f)); memset(r,0,sizeof(r));dfs(0,0);}show(qq);return 0; }上面的思路不是很明白了現在?!說一下現在的思路吧!
每種飼料我們可以選擇選或者不選,那么在這種情況下我們可以選擇深度優先搜索求解:
(1)為了使所求得的序列是最小的,那么我們應該首先選擇 ” 選 ” 。
(2)我用p數組標記當前飼料選否!r數組存儲當前的選擇時各種vit的和,q數組存放最后的答案,當我們來到最后一個飼料的時候,我們就要判斷當前的選擇是否能夠滿足我們對vit的要求,即r數組和v數組進行比較。需要注意的是,我們優先要求的是所需飼料種類最少,其次是序列號較小的那一個!
(3)最后輸出的時候,如果是最后一個的話,記得輸出換行符,否則的話,
輸出一個空格。
總結
以上是生活随笔為你收集整理的USACO-Section2.1 Healthy Holsteins (深度优先搜索)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态规划问题中找零问题 --C语言实现
- 下一篇: Detours的作用和实例(hook、钩