洛谷 2409 dp 月賽題目

2021-07-24 10:50:16 字數 988 閱讀 4512

洛谷十月月賽t1,一道有些interesting的dp題目,當時做的時候想的比較複雜,根本沒有往dp的方向去想。。

1、據說可以使用優先佇列來處理,參見uva11997

2、據說可以二分sum值再搜尋剪枝,然而個人實現只得了50分

設dp[i][j]表示使用了前i個盒子,組成的sum值為j的方案數

首先預處理出dp[1] 的值,之後進行轉移,對於第i個盒子,dp[i][j] = (dp[i][j] + dp[i-1][j + data[i][k]])

借用一下kkk的圖

通俗點解釋,假設第乙個盒子為1 3 4 5,則dp[1][1] = dp[1][3] = dp[1][4] = dp[1][5] = 1,

考慮第二個盒子為1 7 9, 則dp[2][1 + 1] += 1, dp[2][3 + 1] += 1, dp[2][4 + 1] += 1, dp[2][5 + 1] += 1,

dp[2][1 + 7] += 1, dp[2][3 + 7] += 1 ... 以此類推

由此得證dp方程

(時間)顯然可以發現每次sum值最多隻會增加100,可以以此限定j的上限。

(空間)由於第一維滿足滾動陣列的使用條件,可使用滾動陣列壓縮掉一維的空間

#include 

#include

#include

int dp[110][10100];

int x;

int n;

int mi;

int k;

int tot = 0;

int main ()

for (int i = 2; i <= n; i++)

}for (int i = 1; i <= tot; i++)

}return

0;}

洛谷月賽總結

include using namespace std char s 1000005 long double l,r,t,wsl,wsr,dr,dl,fu bool pd,big,lx,rx inline long long read int main if pd if ful strlen s i...

洛谷2018 6月賽

對於初中生來說簡直就是閱讀理解場,感覺之前自學的高中物理全白學了。t1 物理 平拋運動 題意概述 怎麼概述,我自己還沒完全看懂呢.事實上是個名副其實的簽到題。首先發現了一些公式,然後發現關鍵就是 t 只要有了 t 別的就都可以隨便算啦。這時候就發現乙個很奇妙的事情,v 好像給了兩種表示方法?於是就可...

洛谷月賽 禮物

題解 首先我們會發現題目限制等價於要同乙個組中的數不能再2進製下呈包含關係 然後可以建一張郵箱無圖,找最長鏈 我們考慮ai只有10 6 從大到小考慮,列舉刪掉每一位的連邊方法 複雜度20 10 6 這麼做的正確性是顯然的 因此從小到大插入每個數,貪心的放在前面這個正確性可以反證 include us...