1. 程式人生 > >九校模擬——餐館(restaurant)

九校模擬——餐館(restaurant)

1.3 name ret n-1 超過 scan team -s 收獲

1 餐館(restaurant)
1.1 題目背景
銅企鵝是企鵝餐館的老板,他正在計劃如何使得自己本年度收益增加。
1.2 題目描述
共有n 種食材,一份食材i 需要花ti 小時不間斷地進行播種,施肥,
直至收獲。當然,一份食材i 是可以直接賣掉得到wi 塊錢的。
招牌菜共有m 種,一份招牌菜i 需要消耗一定的食材,花Ti 小時不
間斷地來烹飪,叫賣,並最終賣出得到Wi 塊錢。
整個季度換算下來一共有Tmax 小時可供你使用,銅企鵝需要在這期間
賺到最多的錢,這樣他才有足夠多的錢來steam 剁手,或者氪金手遊。
1.3 格式
1.3.1 輸入格式
第一行一個整數T,表示數據組數。
令i 表示為當前數據內行數。


第一行三個整數n; m; Tmax,含義如題所示。
第二行至第n + 1 行,每行兩個整數ti-1;wi-1,含義如題所示。
第n + 2 行至第n + m + 1 行,每行兩個整數T i-n-1;W i-n-2,含義如題所示。
第n + m + 2 行至第n + 2m + 1 行,每行n 個整數,第j 個數dj 表示招牌菜i-n-m-1 需要dj 個食材j。
1.3.2 輸出格式
對於每組數據,輸出一行一個整數,表示你所能賺到的最多的錢。
1.4 樣例
1.4.1 樣例輸入
3
1
1 48
2 2000
9 21864
5
4 4 46
17 52
4 36
5 43
16 62
9 31659

1 20431
4 623
1 11961
4 5 3 5
5 4 3 4
3 3 3 3
4 4 5 5
10 0 48
10 41
18 48
2 14
22 65
12 77
7 48
4 85
2 61
24 85
8 34
1.4.2 樣例輸出
53728
410
1464
1.5 數據範圍
Subtask| 分值|n | m | T
1 |3 | 1| 1| 0
2 |20| 1 |1 |5
3 |10 |4| 4| 5
4 |17 |2000| 0| 5
5 |50| 2000 |2000| 4
對於100% 的數據,保證0 < ti; Ti <=Tmax<= 5000;
0 <=wi;Wi <=10^9,

每份招牌菜使用的食材的個數總數不超過10^5。

 1 #include<cstdio>
 2 #include<cmath>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 long long int i,j,T,n,m,tda,k,wa,f[5005],tot = 0,p;
 7 struct node
 8 {
 9   long long int t;
10   long long int w;
11 }a[4005];
12 long long read() 
13 {
14     int ret=0;
15     char c;
16     c=getchar();
17     while(c>9||c<0) {
18         c=getchar();
19     }
20     while(c>=0&&c<=9) {
21         ret=ret*10+c-0;
22         c=getchar();
23     }
24     return ret;
25 }
26 int main()
27 {
28   scanf("%lld",&T);
29   for(p = 1;p  <= T;p++)
30     {
31       n = read();
32       m = read();
33       tda = read();
34       for(i = 1;i <= tda;i++)
35     {
36       f[i] = 0;
37     }
38       for(i = 1;i <= n + m;i++)
39     {
40           a[i].t = read();
41         a[i].w = read();
42     }
43       for(i = n + 1;i <= n + m;i++)
44     {
45       for(j = 1;j <= n;j++)
46         {
47             wa = read();
48           a[i].t += a[j].t * wa;
49         }
50     }
51       for(i = 1;i <= n + m;i++)
52     {
53          for(j = a[i].t;j <= tda;j++)
54         {
55           f[j] = max(f[j],f[j - a[i].t] + a[i].w);
56         }
57     }
58       printf("%lld\n",f[tda]);
59     }
60   return 0;
61 }

*******這道題是一個多重背包哦,特別神奇,加個long long能多47分,如果要是加個讀入優化,就AC啦。
對於招牌菜的時間要加上他所需要的食材的時間哦0.0

九校模擬——餐館(restaurant)