Luogu P1874 快速求和 DP

2022-07-02 16:36:18 字數 985 閱讀 3007

傳送門

dp[i][j]表示前前i位組成數字k的最小次數,預處理出s[i][j]表示數字i到j表示的數字

狀態轉移方程即為:dp[i][k] = min(dp[i][k], dp[j - 1, k - s[i][j]] + 1).

dp[0][0] = 0, 其餘為大數字

當遇到s[i][j]大於n時,將s[i][j]設為乙個大數,以免爆int

#include#include#include#define inf 1000000

using namespace std;

int num[100], len, n;

int dp[50][100001], s[100][100]; //前i位組成數字k的最小次數

//dp[i][k] = min(dp[i][k], dp[i -

void read()

int main()

} for(int i = 0; i < 100; i++)

} read();

scanf("%d", &n);

//[i, i+l]數字,若大於100000設為inf

for(int i = 1; i <= len; i++)

for(int l = 1; l <= len; l++) }

// for(int i = 1; i <= len; i++)

// }

dp[0][0] = 0;

for(int i = 1; i <= len; i++)

// dp[i][k] = min(dp[i][k], dp[j - 1][k - val] + 1);

}// int l = i - j + 1;

} }if(dp[len][n] > 100) dp[len][n] = 0;

printf("%d", dp[len][n] - 1);

return 0;

}

c HDOJ1874 floyd演算法求最短路徑

題目大意 給出乙個圖與起點和終點,求兩個點之間權值最小的路徑 還是求最短路徑的這個題,這次用了另一種演算法,floyd演算法,這個演算法的優點是可以計算負權值,而且一次把所有的兩個點之間的路徑都算出來了,而且 編寫簡單,缺點就是時間複雜度比較高,為o n 3 include include defi...

Luogu P1451 求細胞數量

一矩形陣列由數字0到9組成,數字1到9代表細胞,細胞的定義為沿細胞數字上下左右若還是細胞數字則為同一細胞,求給定矩形陣列的細胞個數。1 m,n 100 輸入格式 輸入 整數m,n m行,n列 矩陣輸出格式 輸出 細胞的個數 輸入樣例 1 4 10 0234500067 1034560500 2045...

luogu p1030 求先序排列

傳送門 給出一棵二叉樹的中序與後序排列。求出它的先序排列。約定樹結點用不同的大寫字母表示,長度 le 8 2 行,均為大寫字母組成的字串,表示一棵二叉樹的中序與後序排列。1 行,表示一棵二叉樹的先序。badc bdcaabcd這道題要我們求出這棵二叉樹的先序。而先序是根左右,左右子樹也是根左右,這意...