*問題描述:抓兔子
n個排成一排的洞,編號為1到n,兔子每天晚上會跳到相鄰的一個洞里,小q每天只能白天檢查其中的一個洞,
小q會告訴你每天檢查的洞,分析是否一定能抓到兔子
示例:3個洞,第一天檢查2號洞,第二天檢查2號洞,就會抓到兔子
輸入描述:n,k(n,k<1e3)分別代表洞的個數,小q檢查的天數
接下來k個數,表示小q檢查洞的個數
?
分析:可以通過dp方法解決,代碼如下,有注釋
#include<bits/stdc++.h> using namespace std;int caclute[1005][1005];//通過動態規劃記錄數據 int main() {int n,k;//n代表洞的個數,k代表檢查的天數int check[1005];//用來存儲每天檢查洞的位置cin>>n>>k;for(int i = 0;i < k;i++)
cin>>check[i];//處理第一天檢查for(int i=0;i<n;i++){caclute[0][i]=1;} caclute[0][check[0]-1]=0;//循環處理for(int i = 0;i<k;i++){//每天輪著進行檢查for(int j = 0;j<n;j++){if(caclute[i][j] == 1){if(j == 0)caclute[i+1][j+1] = 1;else if(j == n-1) caclute[i+1][j-1]=1;else{caclute[i+1][j+1] = 1; caclute[i+1][j-1]=1;}}}caclute[i+1][check[i+1]-1]]=0;}int flag=1;for(int i = 0;i<n;i++){if(caclute[k][i] == 1){flag = 0;break;}}if(flag)puts("yes");else puts("no"); }
?