Codeforces 366C Dima and Salad

Posted GFY

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 366C Dima and Salad相关的知识,希望对你有一定的参考价值。

http://codeforces.com/problemset/problem/366/C

题意:在一个冰箱里有n种水果,并且这些水果每一种都有一个美味度和一个卡路里的属性, 小明要从这些水果中选出来一些做一个水果沙拉, 并且要求他的水果沙拉的美味度之和是卡路里和的k倍,问小明是否可以做出这么一个水果沙拉,若不能输出-1,否则输出符合要求的最大的美味值之和。

思路:考虑这样DP:f[i][j]:做到第i个水果,平衡度为j,平衡度的表示:Σa[i]-K*Σb[i],这样就可以dp

f[i][j]=max(f[i-1][j],f[i-1][j-a[i]+K*b[i]])

 1 #include<cstdio>
 2 #include<cmath>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<iostream>
 6 int f[105][100005],a[1005],b[1005],g[1005][1005];
 7 int n,K;
 8 int read(){
 9     int t=0,f=1;char ch=getchar();
10     while (ch<0||ch>9){if (ch==-) f=-1;ch=getchar();}
11     while (0<=ch&&ch<=9){t=t*10+ch-0;ch=getchar();}
12     return t*f;
13 }
14 int main(){
15     n=read();K=read();
16     for (int i=1;i<=n;i++) a[i]=read();
17     for (int i=1;i<=n;i++) b[i]=read();
18     for (int i=0;i<=n;i++)
19      for (int j=0;j<=500000;j++)
20       f[i][j]=-99999999;
21     f[0][20000]=0;  int cnt=0;
22     for (int i=1;i<=n;i++){
23         cnt++;
24         for (int j=-10000;j<=10000;j++){
25            f[i][j+20000]=std::max(f[i][j+20000],std::max(f[i-1][j+20000],f[i-1][j-a[i]+K*b[i]+20000]+a[i]));
26         }
27     }
28     int ans=-1;
29     if (f[n][20000]) ans=f[n][20000];
30     printf("%d\n",ans);
31     return 0;
32 }

 

以上是关于Codeforces 366C Dima and Salad的主要内容,如果未能解决你的问题,请参考以下文章

codeforces 366C Dima and Salad 限制性01背包

Dima and Magic Guitar CodeForces - 366E

Codeforces 374 C Inna and Dima (DFS)

Codeforces Round #214 (Div. 2) C. Dima and Salad 背包

Codeforces 358D. Dima and Hares (dp)

codeforces-214(Div. 2)-C. Dima and Salad+DP恰好背包花费