codeforces366C

题意:给你两个数组,一个为数组a,一个为数组b,这两个数组的大小都为n,要你从中选出一些,是的他们的sum(a[i])==k*sum(b[i]),然后要使sum(a[i])的值最大!

下面是我的错误代码:

      

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int inf=1e9+7;
 4 int n,k;
 5 int ai[110],bi[110],ci[110];
 6 int dp[200100];
 7 int main(){
 8     scanf("%d%d",&n,&k);
 9     for(int i=1;i<=n;i++) scanf("%d",&ai[i]);
10     for(int i=1;i<=n;i++){
11         scanf("%d",&bi[i]);
12         ci[i]=ai[i]-k*bi[i];
13     }
14     int mid=100000;
15     for(int i=0;i<=200010;i++) dp[i]=-inf;
16     dp[mid]=0;
17     for(int i=1;i<=n;i++){
18         for(int j=200010;j>=0;j--){
19             if(j-ci[i]>=0&&j-ci[i]<=200010){
20                 dp[j]=max(dp[j],dp[j-ci[i]]+ai[i]);
21             }
22         }
23     }
24     if(dp[mid]==0) cout<<"-1"<<endl;
25     else cout<<dp[mid]<<endl;
26     return 0;
27 }
View Code

猜你喜欢

转载自www.cnblogs.com/pandaking/p/9966580.html