码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces 366C Dima and Salad

时间:2016-06-28 12:28:13      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:

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

标签:

原文地址:http://www.cnblogs.com/qzqzgfy/p/5622922.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!