日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

dp问题:采药

發布時間:2023/11/30 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dp问题:采药 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天把采藥A了,屬于dp問題,主要思路是把所有時間都存進一個數組中,數組的值對應藥的價值,下標是時間,然后記憶化搜索,碰到價值高的就賦值,相比于摘花生,辰辰是一個聰明的猴子,不廢話了,上代碼。

Code

#include <iostream>

#include <cstring>

using namespace std;

int ji[1002];

int main()? {

???????? int t,m,a,b,i,j;

???????? while(cin>>t>>m)

??? {

?????????????????? memset(ji,0,sizeof(ji));

?????????????????? for(i=1;i<=m;i++)

?????????????????? {

??????????????????????????? cin>>a>>b;

??????????????????????????? if(t-a>=0)

??????????? for(j=t-a;j>=0;j--)

???????????? if(ji[j]+b>ji[j+a])

?????????????? ji[j+a]=ji[j]+b;

??????? }

?????????????????? cout<<ji[t]<<endl;

???????? }

???????? return 0;

?}

附帶另一個問題,多多摘花生,這里不吐槽那猴子有多笨了,下面的數據足以說明;

2?? 8? 8

6? 0? 0? 0? 0? 0? 0? 0

0???????? 0? 0? 0? 0? 0? 0? 8

那只猴子如果聰明的話能摘14個,笨蛋猴子只能摘8個。

Code

#include <iostream>

#include <cstdlib>

using namespace std;

int main()

{

??????? int n;

??????? int row, col;

??????? int time;

??????? cin >> n;

??????? while (n--)

??????? {

?????????????? cin >> row >> col >> time;

?????????????? int i, j;

?????????????? int curPi = 0, curPj;

?????????????? int p[51][51];

?????????????? int timet = 0;

?????????????? int pg = 0;

?????????????? for (i = 1; i <= row; i++)

?????????????? {

?????????????????????? for (j = 1; j <= col; j++)

?????????????????????? {

?????????????????????????????? cin >> p[j];

?????????????????????? }

?????????????? }

?????????????? int maxPi = 0, maxPj = 0;

?????????????? while (timet <= time)

?????????????? {

?

?????????????????????? int max = 0;

?????????????????????? for (i = 1; i <= row; i++)

?????????????????????? {

?????????????????????????????? for (j = 1; j <= col; j++)

?????????????????????????????? {

????????????????????????????????????? if (p[j] > max)

????????????????????????????????????? {

????????????????????????????????????????????? max = p[j];

????????????????????????????????????????????? maxPi = i;

????????????????????????????????????????????? maxPj = j;

????????????????????????????????????? }

?????????????????????????????? }

?

?????????????????????? }

?????????????????????? if (max == 0)

?????????????????????????????? break;

?????????????????????? if (curPi == 0)

?????????????????????????????? curPj = maxPj;

?????????????????????? if (timet +

?????????????????????????????? (abs(maxPj - curPj) + abs(maxPi - curPi) + 1 + maxPi) <= time)

?????????????????????? {

?????????????????????????????? timet = timet + abs(maxPj - curPj) + abs(maxPi - curPi) + 1;

?????????????????????????????? curPi = maxPi;

?????????????????????????????? curPj = maxPj;

?????????????????????????????? pg += p[curPi][curPj];

?????????????????????????????? p[curPi][curPj] = 0;

?????????????????????? }

?????????????????????? else

?????????????????????????????? break;

?????????????? }

?????????????? cout << pg << endl;

??????? }

??????? return 0;

?

}

代碼還老長。。。。。

?

總結

以上是生活随笔為你收集整理的dp问题:采药的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。