依舊是博弈論的殼子,但問的是最大值,所以要dp
設 dp[i][j] 表示該取 i 號硬幣,上一次取了 j 個的先手能取的最大值,
因為每次從小到大列舉複雜度太高,所以我們要從 dp[i][i - 1] 轉移,每次新加兩個狀態即可
#include #include #include #include #include using namespace std;
const int maxn = 2030;
int init()
while(c >= '0' && c <= '9')
return fh * rv;
}int n, num[maxn], pre[maxn], dp[maxn][maxn];
int main()
for(int i = 1 ; i <= n ; i++)
for(int i = 1 ; i <= n ; i++)
} cout
return 0;
}
洛谷 P2708 硬幣翻轉
時間限制1.00s 記憶體限制125.00mb 從前有很多個硬幣擺在一行,有正面朝上的,也有背面朝上的。正面朝上的用1表示,背面朝上的用0表示。現在要求從這行的第乙個硬幣開始,將前若干個硬幣一起翻面,問如果要將所有硬幣翻到正面朝上,最少要進行這樣的操作多少次?乙個字串,由0和1組成,表示硬幣狀態 乙...
洛谷P1146 硬幣翻轉
時間限制 1.00s 記憶體限制 125.00mb 題目描述在桌面上有一排硬幣,共nn枚,每一枚硬幣均為正面朝上。現在要把所有的硬幣翻轉成反面朝上,規則是每次可翻轉任意n 1n 1枚硬幣 正面向上的被翻轉為反面向上,反之亦然 求乙個最短的操作序列 將每次翻轉n 1枚硬幣成為一次操作 輸入格式 乙個自...
洛谷P2708 硬幣翻轉
題目鏈結 題目描述 有很多個硬幣擺在一行,有正面朝上的,也有背面朝上的。正面朝上的用1表示,背面朝上的用0表示。現在要求從這行的第乙個硬幣開始,將從第乙個硬幣開始的前若干個硬幣同時翻面,求如果要將所有硬幣翻到正面朝上,最少要進行這樣的操作多少次?輸入格式 乙個字串,由0和1組成,表示硬幣狀態 輸出格...