@(k acmer)
題意:
給你乙個長度為n的環,你要把它劃分為m個部分,讓每個部分內部元素的和取餘10再相乘得到的字盡可能大(小).
分析:
如果題中是把乙個鏈劃分為m部分,顯然可以用dp的方法,定義dp
[i][
j]為前i個數劃分為j個部分的最大(小)值,那麼可以有轉移方程:dp
[i][
j]=m
ax(d
p[i]
[j],
dp[k
][j−
1]∗(
(sum
[i]−
sum[
k])
但是是環形的,我們需要拆環為鏈,列舉每乙個拆點,共有n條鏈.對每乙個鏈來做如上dp即可.
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int mod = int(1e9) + 7, inf = 1e8, maxn = 1e5 + 40;
int n, m, dp[55 * 2][11 * 2], dp1[55 * 2][11 * 2], a[55 * 2], sum[55 * 2];
int main(void) }}
/* cout << "s :" << s << endl;
for (int i = s; i < s + n; i++)
cout << endl;
}cout << endl;*/
ansmax = max(ansmax, dp[s + n - 1][m]);
ansmin= min(ansmin, dp1[s + n - 1][m]);
}printf("%d\n%d\n", ansmin, ansmax);
}return
0;}
數字DP 數字遊戲
科協裡最近很流行數字遊戲。某人命名了一種不降數,這種數字必須滿足從左到右個位數字呈現小於等於的關係,如123,446.現在大家決定玩乙個遊戲,指定乙個整數閉區間 a,b 問這個區間內有多少個不降數。輸入多組測試資料。每組只包含兩個數字a和b 1 a,b 2 31 每行給出乙個測試資料的答案,即 a,...
數字DP 數字遊戲
科協裡最近很流行數字遊戲。某人命名了一種不降數,這種數字必須滿足從左到右各位數字呈非下降關係,如 123,446。現在大家決定玩乙個遊戲,指定乙個整數閉區間 a,b 問這個區間內有多少個不降數。輸入格式 輸入包含多組測試資料。每組資料佔一行,包含兩個整數 a 和 b。輸出格式 每行給出一組測試資料的...
數字遊戲 (dp)
problem description 丁丁最近沉迷於乙個數字遊戲。這個遊戲看似簡單,但丁丁在研究了很多天之後卻發覺原來在簡單的規則下想要贏得這個遊戲並不那麼容易。遊戲是這樣的,在你面前有一圈整數 一共n個 你要按順序將其分為m個部分,各部分內的數字相加,相加後得的m個結果對10取模後再相乘,最終得...