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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【牛客 - 373B】666RPG(线性计数dp)

發布時間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【牛客 - 373B】666RPG(线性计数dp) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題干:

鏈接:https://ac.nowcoder.com/acm/contest/373/B
來源:牛客網

在歐美,“666”是個令人極其厭惡和忌諱的數,被稱為“野獸數”。
相傳,尼祿,這位歷史上以暴君著稱的古羅馬皇帝,在一次羅馬大火后,無端指控是基督徒焚燒了羅馬,并對他們進行大肆鎮壓。尼祿死后,部分基督徒出于對尼祿的恐懼,相信他并沒有死去,而且還會回到羅馬來。圣經《新約·啟示錄》中說,有一頭野獸“因傷致死,但是它的致命傷又治好了”。“你所看見的獸先前有,如今沒有,將要從無底坑里上來……可以計算野獸的數目,他的數目是六百六十六。” 基督徒把“666”稱為“野獸數”,相信尼祿就是復活的野獸。
關于“野獸數666”有許多趣聞。比如:
美國前總統里根在其離任前,曾打算退休后移居貝萊爾市克勞德大街666號別墅,然而當他得知這一邪惡的門牌號時,頓時大驚失色。
無獨有偶,在尼克松當政時,國務卿基辛格博士也碰上了“666”的調侃。美國著名數學科普作家馬丁·加德納在其名著《不可思議的矩陣博士》中,采用以代碼數字替換英文字母的方式,把26個英文字母變成一個以6為首項、公差為6的等差數列:
A(6),B(12),C(18),D(24),E(30),F(36),G(42),H(48),I(54), J(60),K(66),L(72),M(78),N(84),O(90),P(96),Q(102),R(108),S(114),T(120),U(126),V(132),W(138),X(144),Y(150),Z(156)。
然后,把基辛格(Kissinger)的姓氏字母,變換為代碼數字求和:66+54+114+114+54+84+42+30+108=666,正好是個“野獸數”。
以前對希特勒和墨索里尼也進行過類似的計算。并且,經過一些有心人的“考證”,許多壞事、惡事都與“野獸數666”有關。比如,“666”就正好是賭場輪盤上數字的和。所以,西方人甚至不少名流、學者都對“野獸數666”諱莫如深。
?
不過在數學上,666的確有許多奇妙之處。如:
?1、666是前七個素數的平方和??22+32+52+72+112+132+172=666?22+32+52+72+112+132+172=666
?2、?(6+6+6)+(63+63+63)=666?(6+6+6)+(63+63+63)=666。
?3、?(6+6+6)+2×(6+6+6)2=666?(6+6+6)+2×(6+6+6)2=666。
?4、?13+23+33+43+53+63+53+43+33+23+13=666?13+23+33+43+53+63+53+43+33+23+13=666。
?---廢話到此為止?

?

lililalala正在玩一種有?N?N個回合的回合制RPG游戲,初始分數為0,第?i?i個回合lililalala有如下兩種選擇。

??? A.將分數加上?ai?ai
??? B.將分數?×-1?×-1

lililalala同樣也很討厭野獸數?666?666,但是他很卻喜歡數字?-666?-666。他想知道有多少種不同的方案使得?N?N個回合后分數變為?-666?-666且在任何一個回合之后分數都不為?666?666。

如果兩種方案有任何一個回合選擇不同,就認為這兩種方案是不同的。

答案請對?108+7?108+7取模。

輸入描述:

?

輸入包含兩行。

第一行一個整數?N(1≤N≤300)?N(1≤N≤300)。

第二行?N?N個整數?a1a2a3...an(-666≤?a1a2a3...an≤666)?a1a2a3...an(-666≤?a1a2a3...an≤666)。

輸出描述:

輸出一行一個整數--符合條件的不同方案數。

示例1

輸入

復制

3 -333 -333 -333

輸出

復制

1

說明

?

僅一種符合條件的方案

第一回合選擇將分數?×?1?×?1。分數為?0?0

第二回合選擇將分數加上?-333?-333。分數為?-333?-333

第三回合選擇將分數加上?-333?-333。分數為?-666?-666

示例2

輸入

復制

3 333 333 333

輸出

復制

0

示例3

輸入

復制

13 518 -643 -503 424 -76 -18 547 26 51 -647 -457 -5 329

輸出

復制

2

題目大意:

? ?給定n個數,n個回合,第i個回合可以有兩種選擇:將當前分數*-1,或將當前分數+= a[i]

解題報告:

? ?dp[i][j]代表前i個回合,分數到達j的方案數。注意到可能有負數,平移一個長度zero。又注意到可能會超內存,滾動數組優化一下。如果遇到==666的,就不轉移,就好了。

AC代碼:

#include<cstdio> #include<iostream> #include<algorithm> #include<queue> #include<map> #include<vector> #include<set> #include<string> #include<cmath> #include<cstring> #define ll long long #define pb push_back #define pm make_pair using namespace std; const double PI = acos(-1.0); const int MAX = 2e5 + 5; int n; int a[MAX]; ll dp[2][105555]; const ll mod = 1e8+7 ; const int zero = 50000; int main() {cin>>n;int sum = 0;for(int i = 1; i<=n; i++) cin>>a[i];dp[0][0+zero] = 1;int flag = 0;for(int i = 1; i<=n; i++) {flag ^=1;for(int j = -40000; j<=40000; j++) {if(j == 666) continue;dp[flag][j+zero] += dp[flag^1][-j+zero];dp[flag][j+zero] += dp[flag^1][j-a[i]+zero];dp[flag][j+zero] %= mod;}memset(dp[flag^1],0,sizeof dp[flag^1]);} printf("%lld\n",dp[flag][-666 + zero]);return 0 ;}

?

總結

以上是生活随笔為你收集整理的【牛客 - 373B】666RPG(线性计数dp)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。