驕傲的商人(動態規劃DP C )

2021-08-25 19:45:36 字數 1424 閱讀 4396

驕傲的商人

總時間限制: 1000ms 記憶體限制: 65536kb

描述

最近, isea去了乙個古老的國家。在很長一段時間裡,這個國家是世界上最富有、最強大的國家。因此,即使他們的國家不再那麼富有,這個國家的人民仍然非常自豪。

那裡的商人是最典型的例子。他們每個商人只賣一件商品,**是pi,但是如果你的錢少於qi,他們會拒絕和你交易。isea會評估每一件商品的價值vi。

如果他有m單位的錢,isea能得到的最大價值是多少?

輸入

第一行有兩個整數n,m(1≤n≤500,1≤m≤5000),表示商人的數量和isea初始資金。

接下來n行,每一行包含三個整數pi,qi和vi(1≤pi≤qi≤100,1≤vi≤1000),含義見題目描述。

輸出

輸出乙個整數,表示isea能得到的最大價值

樣例輸入

【樣例輸入1】

2 10

10 15 10

5 10 5

【樣例輸入2】

3 10

5 10 5

3 5 6

2 7 3

樣例輸出

【樣例輸出1】

5
【樣例輸入2】

11
思路點拔:典型的0-1揹包問題的變種,就是拿0-1揹包問題的**,都能過第乙個樣例,但過不了第二個樣例,所以這個才叫變種,首先,我們要對商品進行乙個排序

按照商人評估的**減去**的從小到大排序,為什麼呢?,我們可以這樣理解,商人評估的**可以理解為「看你不順眼值」,「看你不順眼值」-**越小,也就說明這件商品越好賣,本題的解法已經很明確了,上**吧!!

#include

#include

#include

#include

using

namespace

std;

int n,t;

struct node //定義結構體,更方便記錄商品的資訊

a[10005];

bool cmp(const node &a,const node &b)

//將商品按照商人評估價-**的從小到大排序

sort(a+1,a+n+1,cmp);//排序

for(int i=1;i<=n;i++)//0-1揹包問題

}printf("%d\n",f[t]); //輸出答案

return

0;//結束

}

回文串問題(動態規劃DP C )

乙個字串,如果從左到右讀和從右到左讀是完全一樣的,比如 aba 我們稱其為回文串。現在給你乙個字串,可在任意位置新增字元,求最少新增幾個字元,才能使其變成乙個回文串。任意給定的乙個字串,其長度不超過1000.能變成回文串所需新增的最少字元數。在這裡給出一組輸入。例如 ab3bdabb在這裡給出相應的...

動態規劃的原理

動態規劃與分治法相似,都是通過組合子問題的解來求解原問題。動態規劃通常是用來求解最優化問題 optimization problem 這類問題可以有很多個可行解,每個解都有乙個值,我們希望尋找最優值 最大值或者最小值 的解。我們稱這樣的解為問題的乙個最優解 oneoptimization solut...

動態規劃的思想

動態規劃 dynamic programming 演算法是解決多階段決策過程最優化問題的一種常用方法,難度比較大,技巧性也很強。利用動態規劃演算法,可以優雅而高效地解決很多貪婪演算法或分治演算法不能解決的問題。動態規劃演算法的基本思想是 將待求解的問題分解成若干個相互聯絡的子問題,先求解子問題,然後...