ssl1377-竞赛真理【dp之分组背包】
其實這題很簡單,我也不想多講,但沒辦法老師要我們發(fā)博客╭(╯^╰)╮
Description
TENSHI在經(jīng)歷了無數(shù)次學(xué)科競賽的失敗以后,得到了一個真理:做一題就要對一題!但是要完全正確地做對一題是要花很多時間(包括調(diào)試時間),而競賽的時間有限。所以開始做題之前最好先認真審題,估計一下每一題如果要完全正確地做出來所需要的時間,然后選擇一些有把握的題目先做。 當(dāng)然,如果做完了預(yù)先選擇的題目之后還有時間,但是這些時間又不足以完全解決一道題目,應(yīng)該把其他的題目用貪心之類的算法隨便做做,爭取“騙”一點分數(shù)。
任 務(wù) :根據(jù)每一題解題時間的估計值,確定一種做題方案(即哪些題目認真做,哪些題目“騙”分,哪些不做),使能在限定的時間內(nèi)獲得最高的得分,
Input
第一行有兩個正整數(shù)N和T,表示題目的總數(shù)以及競賽的時限(單位秒)。以下的N行,每行4個正整數(shù)W1i 、T1i 、W2i 、T2i ,分別表示第i題:完全正確做出來的得分,完全正確做出來所花費的時間(單位秒),“騙”來的分數(shù),“騙”分所花費的時間(單位秒)。
其中,3 ≤ N ≤ 30,2 ≤ T ≤ 1080000,1 ≤ W1i 、W2i ≤ 30000,1 ≤ T1i 、T2i ≤ T。
Output
所能得到的最高分值
Sample Input
樣例1
4 10800
18 3600 3 1800
22 4000 12 3000
28 6000 0 3000
32 8000 24 6000
樣例2
3 7200
50 5400 10 900
50 7200 10 900
50 5400 10 900
Sample Output
樣例1
50
樣例2
70
解題思路
? 分組背包不解釋。
代碼
#include<cstdio> #include<iostream> using namespace std; int w[31][2],c[31][2],f[1080000],m,n,t,p; int main() {scanf("%d%d",&n,&m);for (int i=1;i<=n;i++){scanf("%d%d%d%d",&c[i][0],&w[i][0],&c[i][1],&w[i][1]);}//輸入for (int i=1;i<=n;i++)for (int j=m;j>=0;j--)for (int k=0;k<=1;k++)//分組背包if (j>=w[i][k]){f[j]=max(f[j],f[j-w[i][k]]+c[i][k]);//動態(tài)轉(zhuǎn)移方程}printf("%d",f[m]); }總結(jié)
以上是生活随笔為你收集整理的ssl1377-竞赛真理【dp之分组背包】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 钰怎么读音 钰的读音及解释
- 下一篇: 拓怎么读 拓的读音