1009 貓鼠交換
解析:一道典型的貪心演算法的題,類似於揹包問題,先按單價從小到大排序,再從最便宜的開始買,每次都買的盡可能多。
#include
#include
using namespace std;
struct greedheart
;bool compare(greedheart room1,greedheart room2)
int main()
sort(room,room+n,compare);
for(int i=0;i= room[i].catfood)
}printf("%.3lf\n",sum);
}心得:貪心演算法的題很常見也很重要,一定要理解並多練習,保證熟練度。
1010 迷宮問題
題目理解:在乙個迷宮內設定乙個起點和乙個終點,並在迷宮內設定若干個牆壁,在輸入乙個步數,判斷是否能在這個步數之類到達終點。
解析:本題可以利用bfs深度遍歷,遍歷每一條路徑,然後再將能到達終點的路徑和輸入步數相比較,判斷是否相等。
#include "iostream"
#include "cstring"
using namespace std;
const int maxn = 13;
char a[maxn][maxn];
int vis[maxn][maxn];
int t, n, m, final, sx, sy, ex, ey;
int dx=;
int dy=;
void dfs(int x, int y, int step)
}int main()
dfs(sx, sy, 0);
if(final) puts("yes");
else puts("no");
}return 0;
心得:也是很常見一類迷宮題,之前看到這種題並沒有去理解它的作法,完成這道題後感覺對深度遍歷演算法和迷宮問題的理解都得到了乙個提公升。本題中,還用到了奇偶減枝 中講的非常容易理解。
1011 士兵找母蟲
題意:理解起來比較難,大致就是用最小的代價找到最大的母蟲數。
解析:也是用到了dfs深度搜尋,但再此之上,還用到了動態規劃,我們先定義dp[m][n]表示用n個士兵占領以m為根節點的子樹所能獲得的概率的最大值,f[m][n] = max ,其中v是m的子節點,這樣便寫出了動態方程。
#include
#include
typedef struct room
room;
room r[110];//記錄原始資料
int vis[110], next[110], n, m, tree[110][110];
int dp[110][110];//dp[i][j]代表以第i個節點為根節點的樹在擁有j個士兵的情況下所能獲得首腦的最大概率
int max(int x, int y)
void dfs(int a)
} } return ;
} int main()
if(!m )
else
} return 0;
心得:題目翻譯起來比較複雜,還是需要先把題目意思理解清楚再去做題。動態規劃和深度搜尋相結合,對我來說還是難度比較大的。
1012 數學公式
解析:本題是一道很基礎的計算數學公式題,定義好公式即可。
#include
#include
#define for(i,m,n) for(i=m;i2)
printf("%d %.9lf\n",i,a[i]);
else
cout《心得:基礎題
30天程式設計練習(四)
1013 求數根 題意 各個位數相加,求得的結果再各位數相加,直到取得個位數 解析 1 要用字串的形式輸入,防止大數 2 迴圈求 10,在求和 include include using namespace std int main do n sum while n 9 cout return 0 ...
30天程式設計練習(十)
1040 排序 題意 給你一些整數,你的任務是對這些數字進行排序。解析 快速排序 include include include include include using namespace std void main cout arr 0 for int i 1 i 1041 函式題 題意 初始...
30天程式設計練習(十一)
1044 迷宮問題 題意 你,冒險家,在乙個危險的地牢裡。你被告知地牢要倒塌了。你必須在規定的時間內找到出口樓梯。但是,你不想空手離開地牢。地牢裡有很多稀有的珠寶。在你離開之前試著收集一些。有些珠寶便宜,有些貴。所以你會盡最大努力最大化你的收藏,更重要的是,及時離開地牢。解析 bfs構建乙個珠寶和珠...