oj題號:洛谷1005
思路:動態規劃。
不難發現每行能夠取得的最大值僅與當前行的資料有關,因此本題可以對每行的資料分別dp,最後求和。
設$f_$表示左邊取$i$個、右邊取$j$個的最大值,則dp方程為$f_=max(f_+a_*2^,f_+a_*2^)$。
然而資料規模較大,使用 int 只有40分,用 unsigned long long 只有60分。所以需要高精度,不過實現起來並不複雜。
另外有一些小小的優化,比如壓位、預處理二的冪。
1 #include2 #include3 #include4class
bigint
13 bigint(const
int len,const
intnum)
17 bigint operator + (const bigint &x) const
24if(ans.num[ans.len+1]) ans.len++;
25return
ans;26}
27 bigint operator * (const
int &x) const
34if(ans.num[ans.len+1]) ans.len++;
35return
ans;36}
37bool
operator
< (const bigint &x) const
44return
false;45
}46 bigint& operator = (const bigint &x)
51void
print()
56 printf("\n"
);57}58
};59
const
int m=81
;60 bigint pow[m]=;
61void calcpow(const
intx)
64int
main()
80 max=std::max(max,f[i][m-i]);81}
82 ans=ans+max;83}
84ans.print();
85return0;
86 }
NOIP2007提高組 矩陣取數遊戲
本題dp 高精度即可。首先我們可以發現它的貢獻只與行有關係,於是就分成n行,每行都做dp,然後將max加起來即可。ps 用高精度實現 上標 include include include define mo 100000 define ll long long using namespace std...
提高組NOIP2007 矩陣取數遊戲
題目描述 帥帥經常跟同學玩乙個矩陣取數遊戲 對於乙個給定的n m的矩陣,矩陣中的每個元素a i,j 均為非負整數。遊戲規則如下 每次取數時須從每行各取走乙個元素,共n個。m次後取完矩陣所有元素 每次取走的各個元素只能是該元素所在行的行首或行尾 每次取數都有乙個得分值,為每行取數的得分之和,每行取數的...
NOIP2007提高組 矩陣取數遊戲
本題dp 高精度即可。首先我們可以發現它的貢獻只與行有關係,於是就分成n行,每行都做dp,然後將max加起來即可。ps 用高精度實現 上標 include include include define mo 100000 define ll long long using namespace std...