【动态规划】 数字游戏 (ssl 1653)
生活随笔
收集整理的這篇文章主要介紹了
【动态规划】 数字游戏 (ssl 1653)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
數(shù)字游戲
題目大意:
有n個(gè)數(shù),分別為a[1] (序號(hào)為1),a[2] (序號(hào)為2),a[3]…a[n],讓你選m個(gè)數(shù),每選一個(gè)數(shù),就要減去已選個(gè)數(shù)(不算當(dāng)前數(shù))*b[i] (i為當(dāng)前值的序號(hào)),所選數(shù)的最大值(要減去相應(yīng)的b)
原題
小W發(fā)明了一個(gè)游戲,他在黑板上寫出了一行數(shù)字a1,a2,a3,……,an,然后給你M個(gè)回合的機(jī)會(huì),每會(huì)回你可以從中選擇一個(gè)數(shù)字擦去它,接著剩下來的每個(gè)數(shù)字ai都要遞減一個(gè)值bi。如此重復(fù)m個(gè)回合,所有你擦去的數(shù)字之和就是你所得的分?jǐn)?shù)。
小W和他的好朋友小Y玩了這個(gè)游戲,可是他發(fā)現(xiàn),對(duì)于每個(gè)給出的a和b序列,小Y的得分總比他高,所以他就很不服氣。于是他想讓你幫他算算,對(duì)于每個(gè)a和b序列,可以得到的最大得分是多少。
Input
輸入文件的第一行是一個(gè)整數(shù)n(1<=n<=2000),表示數(shù)字個(gè)數(shù);第二行一個(gè)整數(shù)m(1<=m<=n),表示回合數(shù),接下來一行有n個(gè)不超過10000的正整數(shù),a1,a2,a3,……,an表示原始序列,最后一行有n個(gè)不超過500的正整數(shù),b1,b2,b3,……,bn,表示每回合每個(gè)數(shù)字遞減的值。
Output
輸出文件只有一個(gè)整數(shù),表示最大的可能得分
Sample Input
3
3
10 20 30
4 5 6
Sample Output
47
解題方法;
用二維數(shù)組來表示f[i] (前i個(gè)) [j](選j個(gè)),選的情況就是f[i-1][j-1]+a[i]-b[i]×(j-1),因?yàn)橹斑x了j-1個(gè)所以要減b[i]×(j-1),不選直接f[i-1][j],但這樣有可能還不是最優(yōu),所以我們要先按b從大到小排,這樣就可以使減去的盡可能小
動(dòng)態(tài)轉(zhuǎn)移方程:
f[i][j]=max{f[i?1][j]f[i?1][j?1]+a[i]?b[i]?(j?1){\color{Cyan} f[i][j]=max\left\{\begin{matrix}f[i-1][j]\\ f[i-1][j-1]+a[i]-b[i]*(j-1)\end{matrix}\right.}f[i][j]=max{f[i?1][j]f[i?1][j?1]+a[i]?b[i]?(j?1)?
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> using namespace std; int n,m,f[2005][2005]; struct rec {int a,b;//為了方便排序,我們用結(jié)構(gòu)體 }l[2005]; bool cmp(rec l1,rec l2) {return l1.b>l2.b;//從大到小 } int main() {scanf("%d%d",&n,&m);for (int i=1;i<=n;i++)scanf("%d",&l[i].a);for (int i=1;i<=n;i++)scanf("%d",&l[i].b);sort(l+1,l+1+n,cmp);//排序memset(f,-127/3,sizeof(f));//因?yàn)樗袦p去的所以可能是負(fù)數(shù),所以要先賦一個(gè)小值f[1][1]=l[1].a;//預(yù)處理for (int i=2;i<=n;i++)f[i][1]=max(l[i].a,f[i-1][1]);//選一個(gè)要是不選,就是前面的,要是選,只要當(dāng)前的for (int i=1;i<=n;i++)for (int j=2;j<=m;j++)f[i][j]=max(f[i-1][j],f[i-1][j-1]+l[i].a-l[i].b*(j-1));//動(dòng)態(tài)轉(zhuǎn)移方程printf("%d",f[n][m]);return 0; }總結(jié)
以上是生活随笔為你收集整理的【动态规划】 数字游戏 (ssl 1653)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【动态规划】大厅安排 (ssl 1212
- 下一篇: 【记忆化搜索】【线性化DP】滑雪 (ss