題目鏈結
玄學題目。。。。可以用篩表,動規,搜尋做
篩表從小到大列舉,篩掉可以表示出來的數,剩下的數就是必須要選的(也就是答案)。
#includeusing
namespace
std;
int dp[25005], t, a[105
], n, sum;
intmain()
sort(a+1, a+1+n);
for(int i = 1; i <= a[n]; i++)
}for(int i = 1; i <= a[n]; i++)
if(dp[i] == 2) sum++;
cout
<< sum <}
return0;
}
動態規劃
/*狀態 m, dp[i]
dp[i]代表面值為i的紙幣最多有幾種表示
注意這是個剛好裝滿的完全揹包問題(注意初始化)
dp[i] = max(dp[i], dp[i-a[i]]+1);
*/#include
#include
#include
#include
using
namespace
std;
int a[105], n, q[30000
], t, ans;
intmain()
return0;
}
啟示:剛好裝滿問題中
1.將dp[i] 初始化為-inf ,dp[i] = max(dp[i], dp[i-a[i]]+1);
2.沒有初始化dp[i],需要再加一層迴圈,極大的增加複雜度。
//記憶化搜尋#includeusing
namespace
std;
int a[105], cnt, vis[25005], ans, t, x, n, f[25005
];void dfs(int now, int sum, int
x) }
}int
main()
return0;
}
Luogu P5020 貨幣系統
先把 a 陣列排一下序。從最小的數開始選,顯然最小這個數必須選,然後利用完全揹包的思想,從 a i 到最大值篩選一遍,將可以組成的打上標記。在判斷後面的數字時,如果已經被標記過了,就不再選,沒有被標記過就標記一下,再篩選一次數 即再做一次完全揹包 include define n 110 defin...
Luogu P5020 貨幣系統
作為一道 noip 題,當然要考慮從部分分到正解,一是拿穩分防止正解寫掛,二是可以拿不同部分分的程式對拍。分析 看到樣例大膽猜想,或者考慮這個問題的本質。可以通過反證法證明新貨幣系統的集合一定是原貨幣系統的子集。考慮先把 a 系統的數全部選上,然後刪去一些,則這些刪去的一定可以被剩下的數都表示出來,...
luogu P1816 忠誠 題解
用st表來解決rmq問題。表示同時培訓學的st表,然後我就忘得差不多了,在這裡推薦一篇blog 大佬cym的 自己再 一篇 舉例 給出一陣列a 0 5 則區間 2,5 之間的最值為1。1 離線預處理 運用dp思想,用於求解區間最值,並儲存到乙個二維陣列中。具體解釋 1 離線預處理 st演算法使用dp...