题意:给你两个数组,一个为数组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 }