1. 程式人生 > >G 零崎的朋友很多Ⅱ(0-1揹包修改版 )

G 零崎的朋友很多Ⅱ(0-1揹包修改版 )

題目描述

零崎有很多朋友,其中有一個叫做lfj的接盤俠。

lfj是一個手殘,他和零崎一起玩網遊的時候不好好打本,天天看拍賣行,沒過多久,就成為了一個出色的商人。不過再出色的投機商也有失手成為接盤俠的一天。所謂真正的接盤俠從來不給自己留活路。當lfj接盤成功之時,即分文不剩之日。

作為lfj的友人,零崎實在看不下去,於是他決定幫lfj一把。當然了,零崎肯定不會自己動手,活還得你們來幹。

lfj可以提供給你們拍賣行所有能買到物品的價格和利潤,還有他的本金。既然是接盤俠,就必須分文不剩。雖然零崎想讓你們給出一次接盤中利潤最大的購買方案,但是lfj覺得只要知道最大利潤就可以了。

輸入

每組資料第一行為兩個整數P和N,表示本金和拍賣行物品個數。(注意:與B題不同每類物品只有一件

接下來N行,每行兩個資料pi,ci代表第i類物品的利潤和購買價格。

1<=P<=20000,1<=N<=300,1<=c,p<=200

輸出

對於每組資料,輸出一行,為能獲得的最大利潤

如果不能成功接盤,則輸出jpx

輸入樣例

3 1
2 1
4 3
3 1
1 3
2 2

輸出樣例

jpx
4

Hint

使用if直接比較不要呼叫max()以防超時

解題分析:改題和0-1揹包問題類似,不過要求實現將揹包的整個容量V,也就是題目中的本金P,全部用盡,同時要求得到利潤最大。需要對裝入的每件商品進行判斷,首先是能否滿足耗盡本金,另外判斷是否比上次的利潤大。

先給出關鍵的程式碼段配合思考:

複製程式碼
1         for(int i=0;i<n;i++)
2         {
3             scanf("%d%d",&pi,&ci);
4             for(int j=p; j >= ci; j--)
5                 if(V[j-ci]!=-1&&V[j]<V[j-ci]+pi)
6                     V[j]=V[j-ci]+pi;
7         }
複製程式碼

明白上述講解之後,下面的輸出以及輸入只是按照題目要求進行。

程式碼實現:

複製程式碼
 1 #include <bits/stdc++.h>
 2
#define max_size 20010 3 int V[max_size]; 4 5 using namespace std; 6 7 int main() 8 { 9 int p,n,pi,ci; 10 while(~scanf("%d%d",&p,&n)) 11 { 12 memset(V,-1,sizeof(V)); 13 V[0]=0; 14 for(int i=0;i<n;i++) 15 { 16 scanf("%d%d",&pi,&ci); 17 for(int j=p; j >= ci; j--) 18 if(V[j-ci]!=-1&&V[j]<V[j-ci]+pi) 19 V[j]=V[j-ci]+pi; 20 } 21 if(V[p]==-1) 22 printf("jpx\n"); 23 else 24 printf("%d\n",V[p]); 25 } 26 }
複製程式碼

另附0-1揹包的實現程式碼:

1 void ZoreOnePack(int cost , int weight)
2 {
3     for (int i = W ; i >= weight ; -- i)
4         f[i] = max(f[i],f[i-weight]+cost) ;
5 }

作者: 伊甸一點

本文版權歸作者伊甸一點和部落格園所有,歡迎轉載和商用,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利.

原文連結 如有問題, 可郵件([email protected])諮詢.

相關推薦

G 朋友很多0-1揹包改版

題目描述 零崎有很多朋友,其中有一個叫做lfj的接盤俠。 lfj是一個手殘,他和零崎一起玩網遊的時候不好好打本,天天看拍賣行,沒過多久,就成為了一個出色的商人。不過再出色的投機商也有失手成為接盤俠的一天。所謂真正的接盤俠從來不給自己留活路。當lfj接盤成功之時,即分文不剩之

HDU 2639 Bone Collector II0-1揹包第k優解

題意: 已知物品的個數、揹包的容量、每個物品的價值和體積,求第k優解; 思路: 和0-1揹包相似,就是陣列加了多一維,不同的是對於第i個物品選和不選的問題,0-1揹包中是直接求的max(dp[j],d[j-w[i]]+v[i]);而在這裡因為要求第k優解,需要將選(mv[])和不

SDNUOJ1033採藥0-1揹包

Description 辰辰是個天資聰穎的孩子,他的夢想是成為世界上最偉大的醫師。為此,他想拜附近最有威望的醫師為師。醫師為了判斷他的資質,給他出了一個難題。醫師把他帶到一個到處都是草藥的山洞裡對他說:“孩子,這個山洞裡有一些不同的草藥,採每一株都需要一些時間,每一株也有它自身的價值。我會給

Chip Factory0 1字典樹 刪除

                                                           時間限制: 5 Sec  記憶體限制: 128 MB                                                  

尋找和為定值的多個數 0-1 揹包

題目描述 輸入兩個整數n和sum,從數列1,2,3.......n 中隨意取幾個數,使其和等於sum,要求將其中所有的可能組合列出來。 分析與解法 每個數都存在被選擇或不被選擇兩種可能,分類遞迴即可(分治思想) package main import "fmt" func S

採藥 OpenJ_Bailian - 27260-1揹包問題

#include <stdio.h> #include <string.h> typedef struct Thing {     int time, value; }Ting; Ting thing[11]; int

NYOJ 49 開心的小明0-1揹包

描述小明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說:“你的房間需要購買哪些物品,怎麼佈置,你說了算,只要不超過N 元錢就行”。今天一早小明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的N 元。於是,

HDU2955Robberies 0-1揹包問題

題目大意:        一個人要搶劫銀行,在保證被抓概率小於某個預設的概率值時,儘可能搶到更多的錢。 輸入:第一行是一個整數t,代表測試用例的個數            接下來第一行是一個小數P和一個整數N,N代表銀行的個數,P代表概率的上限。            接下

9.29-貪心演算法//活動安排//0-1揹包//裝載問題

1.活動安排 描述:Jack是一名nwpu的大一新生,對學校舉辦的各種活動都十分的好奇,想盡可能多的參加這些活動。Npwu每天共有N項活動,其開始結束時間分別為B[i],E[i],(i = 1,2,……N) 請問Jack一天最多能參加幾項活動。當然,Jack在同一時間內只能

Bone Collector0-1揹包

Many years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like to collect varies of bones , such as d

無頭單鏈表的操作基於前面的改版

slist.h #pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<assert.h>

poj 1837 Balance 0 1 背包

blue 0ms ack urn ont rgb int 平衡 plm Balance Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 10326 Accepted: 6393

[POJ 2728]Desert King0-1分數規劃/最優比率生成樹

eat ice finall nec clu bool ann channels try Description David the Great has just become the king of a desert country. To win the respec

HIT1485 A Good Helper0-1背包

accepted num test case eof 做的 nbsp 心態 ive tor 終於補完第二次期末考了……果然考場上心態不好導致好多會做的題都沒時間寫 題目鏈接:   http://acm.hit.edu.cn/hoj/problem/view?id=148

Shell特殊位置變量$0,$1$2,$*,$#,$$,$?,$@,${}

shell$0 文件名及路徑$1,$2 參數1,參數2$# 傳遞給腳本或函數的參數個數$$ 當前Shell進程ID$? 判斷上個命令的執行成功與否,0為成功。$@ 傳遞腳本或函數的所有參數$* 傳遞腳本或函數的所有參數${}註:$@和$*都是傳遞腳本或函數的所有參數。

跟著我從開始入門FPGA一周入門XXOO系列-1、Verilog語法

部分 同步 比較 跑馬燈 begin 寫代碼 人的 thread get (本連載共七部分,這是第一部分) 作者:McuPlayer2013 (EETOP FPGA版塊版主) 原帖地址:http://bbs.eetop.cn/thread-385362-1-1.htm

0.1函數參數的定義方式

def 方式 模塊 聲明 對象 函數名 練習 直接 local 函數參數的定義方式:位置形參星號元組形參命名關鍵字形參雙星字典形參 1.位置形參語法: def 函數名(形參名1,形參名2,…………):語句塊 例子: len(args)) print

Flask:靜態文件&模板0.1

Go chrom 哪裏 emp .com .org 文檔 專業 查看 Windows 10家庭中文版,Python 3.6.4,Flask 1.0.2 前面看了Flask的Quickstart文檔,可是,一直沒有練習裏面的內容,這不,剛剛練習完畢,來寫篇博文記錄一下!

Flask:cookie 和 session 0.1

報錯 重要 doc alt 網站 本地 char 地址 3.6 Windows 10家庭中文版,Python 3.6.4,Flask 1.0.2 Cookie是什麽?有什麽用? 某些網站為了辨別用戶身份、進行 session 跟蹤而儲存在用戶本地終端上的數據(通常經過加

如何判斷數據的每個字節的狀態0/1

int 可能 但是 sign 判斷 -c 取出 text 進行 在有些情況下想要進可能的節省空間,會把一個int或者char的每個字節位都進行賦值,讓每一個字節位都有各自的含義。如果想要取出來的話可以按照按位與的情況 求出char類型的每個字節的狀態按位與unsigned