練習賽10.1.旅行者

旅行者

Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 18 Accepted Submission(s) : 6

Font: Times New Roman | Verdana | Georgia

Font Size: ← →

Problem Description

一個旅行者有一個最多能用m公斤的揹包,現在有n件物品,它們的重量分別是W1,W2,...,Wn,它們的價值分別爲C1,C2,...,Cn.若每種物品只有一件求旅行者能獲得最大總價值。

Input

輸入的第一行爲T,表示測試數據的組數。對於每組測試數據的第一行:兩個整數,M(揹包容量,M<=200)和N(物品數量,N<=30),第2..N+1行:每行二個整數Wi,Ci,表示每個物品的重量和價值。

Output

對於每組測試數據輸出僅一行,一個數,表示最大總價值。

Sample Input

1
10 4
2 1
3 3
4 5
7 9

Sample Output

12
思路分析:這簡單的揹包問題,用一個數組來記錄體積,另一個數組來記錄價值,第三個數組來記錄最大的價值;
代碼:#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
    int c[250],w[255],f[255];//w爲體積,c爲價值
    int m,n,i,t,j;
    scanf("%d",&t);
    while(t--)
    {
        memset(f,0,sizeof(f));
        scanf("%d%d",&m,&n);
        for(i=1; i<=n; i++)
            scanf("%d%d",&c[i],&w[i]);
        for(i=1; i<=n; i--)
        {
            for(j=m; j>=c[i]; j--)
            {
                f[j]=max (f[j],f[j-c[i]]+w[i]);
            }
        }
        printf("%d\n",f[m]);
    }
    return 0;
}
發佈了41 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章