矩陣取數遊戲noip2006(c++ BigInteger的第一次運用)---重點!!
今下午對c++BigInteger進行了初步的瞭解
同時,經過這次,我才深深的體會到了c++的靈活之處
1.對Biginteger的初步認識
2.對c++一些關鍵字的初步認識
3.對vector的一點長進和對這些容器的感覺整體框架加深
4.對operator的認識又加深了
5.熟悉了對c++字串的一些處理
一下將在註釋中標明
<span style="font-size:14px;">#include<cstdio> #include<cstdlib> #include<cstring> #include<vector> #include<algorithm> #include<iostream> #include<cstring> using namespace std; struct BigInteger { static const int base=100000000;//壓位,所要mod的數 static const int width=8;//每一位佔幾位,這裡是佔8位 vector<int> s;//便於釋放申請記憶體,但是可以改為陣列來存,c【0】存陣列大小,後面是陣列 BigInteger (long long num=0) {*this=num;}//初始化 BigInteger operator =(long long num) { s.clear();//賦值之前要清空 do { s.push_back(num%base); num/=base; }while (num); return *this;//???????? } BigInteger operator =(const string &str) //如果有更改,就不能用const { s.clear();//清空 int x,len=(str.length()-1)/width+1;//壓位後有多少位 for (int i=0;i<len;i++) { int end=str.length()-i*width;//由於陣列是從0開始的,這裡很巧妙 int start=max(0,end-width); sscanf(str.substr(start,end-start).c_str(),"%d",&x);///??? .c_str什麼意思??? s.push_back(x); } return *this;//返回值 } BigInteger operator +(const BigInteger &b) const { BigInteger c; c.s.clear(); for (int g=0,i=0;;i++) { if (g==0&&i>=s.size()&&i>=b.s.size()) break; if (i<s.size()) g+=s[i]; if (i<b.s.size()) g+=b.s[i]; c.s.push_back(g%base); g/=base; }//加法,可以更改的 return c;//返回值 } BigInteger operator +=(const BigInteger &b) { *this=*this+b;return *this;//這樣寫 } BigInteger operator *(const BigInteger &b) const { BigInteger c; c.s.clear(); for (int i=1;i<=s.size()+b.s.size();i++)c.s.push_back(0);//乘法,先把陣列大小確定 for (int i=0;i<s.size();i++) for (int j=0;j<b.s.size();j++) c.s[i+j]+=s[i]*b.s[j];//計算 for (int i=0;i<c.s.size()-1;i++) { c.s[i+1]+=c.s[i]/base; c.s[i]=c.s[i]%base; } //進位 while (c.s.back()==0&&c.s.size()>1) c.s.erase(c.s.end()-1);s.erase()刪除某一位,這裡是刪除最後一位 return c;//但是請注意s.end()表示的是最後一位的後面的記憶體地址,由sort中就能看出來,但是最小不能越界,不能小於 }<span style="white-space:pre"> </span> //1,也就是既然有值,那麼最小就是0,也一定是佔一位的。s.back()表示最後面的數<span style="white-space:pre"> </span> bool operator < (const BigInteger &b) const { if (s.size()!=b.s.size()) return s.size()<b.s.size(); for (int i=s.size()-1;i>=0;i--) if (s[i]!=b.s[i]) return s[i]<b.s[i]; return false; } bool operator > (const BigInteger &b) const {return b<*this;} bool operator <=(const BigInteger &b) const {return !(*this>b);} bool operator >=(const BigInteger &b) const {return !(*this<b);} bool operator !=(const BigInteger &b) const {return *this>b||*this<b;} bool operator ==(const BigInteger &b) const {return *this>=b&&*this<=b;}//通過一個'<'變換出的其他的這些 }; ostream& operator<< (ostream &out,const BigInteger &x) { out<<x.s.back();//先把最高位輸出,因為最高位不用補0,其他不夠要補0 for (int i=x.s.size()-2;i>=0;i--) { char buf[20];// sprintf(buf,"%08d",x.s[i]);//為什麼這裡要有08,還有為什麼不能直接輸出?? //突然明白了,因為數字中可能有154000000000000000000000000000999的情況 //並且我們還要把0給輸出來 %08d的意思是佔8位,不夠的用0補齊,而%8d也是佔8位,不夠的用空格補 for (int j=0;j<strlen(buf);j++) out<<buf[j]; } return out; } istream&/*這個&號不知道什麼用*/ operator >> (istream &in,BigInteger &x) { string s;//輸入 if (!(in>>s)) return in; x=s; return in; } int n,m; BigInteger a[100][100],f[100][100]; int main() { BigInteger ans; ans.s.clear();//清空 cin>>n>>m; for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) cin>>a[i][j]; for (int i=1;i<=n;i++) { for (int j=1;j<=m;j++) for (int l=1;l<=m;l++) f[j][l].s.clear();//剛開始一定要清空 for (int j=m;j>=1;j--) for (int l=j;l<=m;l++) { BigInteger k=2,k1=f[j+1][l]+a[i][j],k2=f[j][l-1]+a[i][l]; if (k1>k2) f[j][l]=k1*k;else f[j][l]=k2*k; } ans=ans+f[1][m]; } cout<<ans; return 0; }</span>
相關推薦
矩陣取數遊戲noip2006(c++ BigInteger的第一次運用)---重點!!
今下午對c++BigInteger進行了初步的瞭解 同時,經過這次,我才深深的體會到了c++的靈活之處 1.對Biginteger的初步認識 2.對c++一些關鍵字的初步認識 3.對vector的一點長進和對這些容器的感覺整體框架加深 4.對operator的認識又加深了
單詞個數統計(函式庫第一次運用)
編寫程式,實現單詞個數統計。從鍵盤輸入一行字元,長度小於1000。統計其中單詞的個數,各單詞以空格分隔,且空格數可以是多個。輸入要求:輸入只有一行句子。僅有空格和英文字母構成。輸出要求:輸出單詞的個數。 考察字元陣列與字串,基本c語言函式庫的初步應用,迴圈結構
[luoguP1005] 矩陣取數遊戲(DP + 高精度)
put ring 分享 tdi pre closed () hide += 傳送門 和奶牛那個題很像,每一行狀態互不影響,也就是求 n 遍DP 不過高精度非常惡心,第一次寫,調了我一上午。 ——代碼 1 #includ
dp+高精度(洛谷1005 矩陣取數遊戲NOIP 2007 提高第三題)
結束 efi -m ron highlight std mes c++ brush 帥帥經常跟同學玩一個矩陣取數遊戲:對於一個給定的n*m的矩陣,矩陣中的每個元素aij均為非負整數。遊戲規則如下: 1.每次取數時須從每行各取走一個元素,共n個。m次後取完矩陣所有元素;
codevs 1166 矩陣取數遊戲
bigint else for 封裝 with 好的 push_back lin cassert 二次聯通門 : codevs 1166 矩陣取數遊戲 /* codevs 1166 矩陣取數遊戲 SB區間dp dp[l][
洛谷 P1005 矩陣取數遊戲
每次 狀態轉移方程 latex 輸出格式 scan 有一個 練手題 開始 define 題目描述 帥帥經常跟同學玩一個矩陣取數遊戲:對於一個給定的n*m的矩陣,矩陣中的每個元素aij均為非負整數。遊戲規則如下: 1.每次取數時須從每行各取走一個元素,共n個。m次後取完矩
dp算法第二發之noip矩陣取數遊戲
space lpad with cell false 空格 memset 文件 urn dp+高精度。希望通過此題了解高精度。 矩陣取數遊戲 (game.pas/c/cpp) 【問題描述】 帥帥經常跟同學玩一個矩陣取數遊戲:對於一個給定的n*m的矩陣,矩陣中的每
P1005 矩陣取數遊戲
main eof std void def 答案 typedef set 輸入輸出 題目描述 帥帥經常跟同學玩一個矩陣取數遊戲:對於一個給定的n*m的矩陣,矩陣中的每個元素aij均為非負整數。遊戲規則如下: 1.每次取數時須從每行各取走一個元素,共n個。m次後取完矩陣所有元
NOIp2007 矩陣取數遊戲
stream class body include 轉移 cstring post out string Luogu 像我這種小蒟蒻怎麽可能會寫高精呢?int128墜好啦 轉移方程太顯然不寫。 #include <cstdio> #include <cst
18.7.27 luogu P1005 矩陣取數遊戲
輸入輸出 圖片 編號 矩陣 algo != 答案 技術分享 ems 題目描述 帥帥經常跟同學玩一個矩陣取數遊戲:對於一個給定的 n \times mn×m 的矩陣,矩陣中的每個元素 a_{i,j}ai,j? 均為非負整數。遊戲規則如下: 每次取數時須從每
luogu1005矩陣取數遊戲題解--區間DP
max == turn org ons 區間 getchar https lin 題目鏈接 https://www.luogu.org/problemnew/show/P1005 分析 忽然發現這篇題解好像並沒有什麽意義。。。因為跟奶牛零食那道題一模一樣,博主比較懶如果您想
[P1005][NOIP2007] 矩陣取數遊戲 (DP+高精)
clu ans ace stdio.h P20 spl 記憶 cin spa 我不會高精…… 也不會DP…… 這道題即考高精又考DP…… 我要死了 給一個不是高精的代碼(當然不能滿分
洛谷P1005 矩陣取數遊戲
題目描述 帥帥經常跟同學玩一個矩陣取數遊戲:對於一個給定的n×m的矩陣,矩陣中的每個元素ai,j均為非負整數。遊戲規則如下: 每次取數時須從每行各取走一個元素,共n個。經過m次後取完矩陣內所有元素; 每次取走的各個元素只能是該元素所在行的行首或行尾; 每次取數都有一個得分值,為每行取數的得
F: 取數遊戲III (思維+簡單dp)
F: 取數遊戲III 題目描述 小 C 剛學了輾轉相除法,正不亦樂乎,這小 P 又出來搗亂,給小 C 留了個 難題。 給 N 個數,用 a1,a2…an來表示。現在小 P 讓小 C 依次取數,第一個數可以 隨意取。假使目前取得 aj,下一個數取ak(k>j),則ak必須滿足gcd(aj,ak)≥
51Nod 1084 矩陣取數問題 V2(dp降維)
一個M*N矩陣中有不同的正整數,經過這個格子,就能獲得相應價值的獎勵,先從左上走到右下,再從右下走到左上。第1遍時只能向下和向右走,第2遍時只能向上和向左走。兩次如果經過同一個格子,則該格子的獎勵只計算一次,求能夠獲得的最大價值。 例如:3 * 3的方格。
矩陣取數遊戲
https://www.luogu.org/problemnew/show/P1005 /* *@Author: STZG *@Language: C++ */ #include <bits/stdc++.h> #include<iostream> #includ
洛谷P1005 矩陣取數遊戲【記憶化搜尋】
題目描述 帥帥經常跟同學玩一個矩陣取數遊戲:對於一個給定的n×mn \times mn×m的矩陣,矩陣中的每個元素ai,ja_{i,j}ai,j 均為非負整數。遊戲規則如下: 每次取數時須從每行各取走
矩陣取數遊戲 noip 2007 [區間DP+高精]
矩陣取數遊戲 題目描述 帥帥經常跟同學玩一個矩陣取數遊戲:對於一個給定的n×m的矩陣,矩陣中的每個元素ai,j均為非負整數。遊戲規則如下: 每次取數時須從每行各取走一個元素,共n個。經過m次後取完矩陣內所有元素; 每次取走的各個元素只能是該元素所在行的行首或行尾;
【提高組NOIP2007】矩陣取數遊戲
題目描述 帥帥經常跟同學玩一個矩陣取數遊戲:對於一個給定的n*m的矩陣,矩陣中的每個元素a[i,j] 均為非負整數。遊戲規則如下: 每次取數時須從每行各取走一個元素,共n個。m次後取完矩陣所有元素; 每次取走的各個元素只能是該元素所在行的行首或行尾; 每次取數都有一個得分值,為每
【日常學習】【區間DP+高精】codevs1166 矩陣取數遊戲題解
題目來自NOIP2007TG3 如果在考場上我現在已經歇菜了吧 今天一整天的時間全部投在這道題上,收穫不小。 先上題目 題目描述 Description 【問題描述】 帥帥經常跟同學玩一個矩陣取數遊戲:對於一個給定的n*m 的矩陣,矩陣中的每個元素aij均 為非