博客 > 数据结构&算法 > 题目&比赛
# POJ 1260 Pearls(DP) [POJ-1260](http://poj.org/problem?id=1260) ## 题目分析 题目比较复杂, 简述一下大意: 有几种不同等级的珠宝, 每种珠宝都有不同的价值. 每买一种珠宝, 需要额外支付该种珠宝单价的十倍. 现在对每种珠宝有不同的采购颗数需求, 但高级珠宝可以顶替低级珠宝的颗数需求. 求出最小的花费. 这道题依然动态规划: ## 代码(C++) ```c++ #include <iostream> #include <algorithm> #define INF 1e9 using namespace std; int main(){ int T; cin >> T; while(T--){ int n, m[105], v[105], dp[105], cnt[105]; dp[0] = 0; cin >> n; for(int i = 1; i <= n; i++){ cin >> m[i] >> v[i]; cnt[i] = cnt[i-1] + m[i]; } for(int i = 1; i <= n; i++){ dp[i] = dp[i-1] + (m[i] + 10) * v[i]; for(int j = 0; j < i; j++){ dp[i] = min(dp[i], (cnt[i] - cnt[j] + 10) * v[i] + dp[j]); } } cout << dp[n] << endl; } return 0; } ```