80pt求调
  • 板块P1441 砝码称重
  • 楼主_adil_
  • 当前回复8
  • 已保存回复8
  • 发布时间2023/8/22 15:36
  • 上次更新2023/11/3 01:59:02
查看原帖
80pt求调
747882
_adil_楼主2023/8/22 15:36
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
#include<math.h>
#include<set>
#include<vector>
#include<map>
#include<utility>
#include<iomanip>
#include<iterator>
#define N 2009
#define INF 0x3f3f3f3f
#define mod 998244353
using namespace std;
typedef long long ll;
typedef long double ldb;
typedef pair<int,int> pii;
int n,m,ans;
int a[N],dp[N];
vector<int> w;
int main(){
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin>>n>>m;
  for(int i=1;i<=n;i++)cin>>a[i];
  for(int i=0;i<=(1<<(n-1));i++){
    if(__builtin_popcount(i)==m){
   //   cout<<i<<endl;
      w.clear();
      memset(dp,0,sizeof(dp));
      for(int j=0;j<n;j++){
        if(!(i&(1<<j))){
        //  cout<<j<<endl;
          w.push_back(a[j+1]);
        }
      }
      dp[0]=1;
      for(int j=0;j<w.size();j++){
        for(int k=n*100;k>=w[j];k--){
          dp[k]=dp[k-w[j]]||dp[k];
        }
      }
      int sum=0;
      for(int i=1;i<=n*100;i++)sum+=dp[i];
      ans=max(ans,sum);
    }
  }
  cout<<ans<<endl;
  return 0;
}
20 4
74 67 39 93 92 99 56 39 35 81 45 1 77 66 98 75 28 73 57 28

这组数据会输出942而非951...

2023/8/22 15:36
加载中...