題目傳送門
這裡呢,用的方法是dp,俗話說的好"神用dp,人用暴力",但是呢,我都不會(白嫖大佬的**)。
方法簡介:
首先,先const 乙個maxn=666*300+5;這裡加5嘛,就只有防**的作用,重要的是這個666*300,為什麼要定義乙個maxn呢,因為,我們要開乙個4*maxn大的二維陣列ans[2][maxn*2+5],那麼為什麼要開乙個maxn大的陣列呢?
因為,我們需要的乙個足夠大的陣列來儲存我們所有可能的結果。那麼問題又來了,所有的可能結果包括到什麼程度。變看**,邊看注釋
#includeusing namespace std;
const int maxn=666*300+5; //以maxn為分界線,代表小於maxn的為負數的結果,大於maxn為大於0的結果
const int mod=1e8+7;
int cur=1;
int old=0;
int ans[2][maxn*2+5];
int a[maxn];
//取模並賦值。
void mo(int &x,int y)
int main() }
cout
}
牛客練習賽41 B 666RPG
題意 有n個回合,每個回合給1個數,每個回合你有兩種選擇 1.加上第i個數 2.將當前數乘 1 想知道有多少種不同的方案使得 n個回合後分數變為 666,且在任何乙個回合之後分數都不為666 n 666 666 答案模1e8 7 n 666 666 分析 n 666 666 我們可以用dp i j ...
牛客練習賽41 B 666RPG
題目大意就是給n個數,然後有n個回合,在第i個回合操作有2種,一種是對當前數 1,第二種是對當前數 ai,問你n回合後數變成 666的操作方案數是多少?另外數的初始值是0,還有在乙個合法的方案裡,不能有某個回合結束後數變成了666 這題用的是計數dp,定義dp i j 表示第i個回合結束之後,數變成...
牛客練習賽41 B 666RPG(計數dp)
思路 我們可以用 則可以得狀態轉移方程為 但是 include using namespace std define ll long long const int n 1e6 7 const int base 301 666 const int mod 1e8 7 int a 305 ll dp 2...