洛谷——P2722 總分 Score Inflation(背包)
阿新 • • 發佈:2017-11-26
cti 整數 () 每一個 class sample 計算 輸出格式 flat
P2722 總分 Score Inflation
題目背景
學生在我們USACO的競賽中的得分越多我們越高興。
我們試著設計我們的競賽以便人們能盡可能的多得分,這需要你的幫助
題目描述
我們可以從幾個種類中選取競賽的題目,這裏的一個"種類"是指一個競賽題目的集合,解決集合中的題目需要相同多的時間並且能得到相同的分數。你的任務是寫一個程序來告訴USACO的職員,應該從每一個種類中選取多少題目,使得解決題目的總耗時在競賽規定的時間裏並且總分最大。輸入包括競賽的時間,M(1 <= M <= 10,000)(不要擔心,你要到了訓練營中才會有長時間的比賽)和N,"種類"的數目1 <= N <= 10,000。後面的每一行將包括兩個整數來描述一個"種類":
第一個整數說明解決這種題目能得的分數(1 <= points <= 10000),第二整數說明解決這種題目所需的時間(1 <= minutes <= 10000)。
你的程序應該確定我們應該從每個"種類"中選多少道題目使得能在競賽的時間中得到最大的分數。
來自任意的"種類"的題目數目可能是任何非負數(0或更多)。
計算可能得到的最大分數。
輸入輸出格式
輸入格式:
第 1 行: M, N--競賽的時間和題目"種類"的數目。
第 2-N+1 行: 兩個整數:每個"種類"題目的分數和耗時。
輸出格式:
單獨的一行包括那個在給定的限制裏可能得到的最大的分數。
輸入輸出樣例
輸入樣例#1: 復制300 4 100 60 250 120 120 100 35 20輸出樣例#1: 復制
605
說明
題目翻譯來自NOCOW。
USACO Training Section 3.1
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define N 45001 using namespace std; int n,m,f[N],t[N],s[N]; int read() {int x=0,f=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘) x=x*10+ch-‘0‘,ch=getchar(); return x*f; } int main() { n=read(),m=read(); for(int i=1;i<=m;i++) s[i]=read(),t[i]=read(); for(int i=1;i<=m;i++) for(int j=t[i];j<=n;j++) f[j]=max(f[j-t[i]]+s[i],f[j]); printf("%d",f[n]); return 0; }
洛谷——P2722 總分 Score Inflation(背包)