洛谷十月月賽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...