A36 贪心算法 P5020 [NOIP2018 提高组] 货币系统

A36 贪心算法 P5020 [NOIP2018 提高组] 货币系统_哔哩哔哩_bilibili

 

P5020 [NOIP 2018 提高组] 货币系统 - 洛谷
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

int n,a[105],f[25005],ans;
//f[j]表示j能被已知数字拼凑的方案数

int main(){
  int T; scanf("%d",&T);
  while(T--){
    scanf("%d",&n);
    for(int i=1; i<=n; i++)
      scanf("%d",&a[i]);
    sort(a+1,a+n+1);
    
    memset(f,0,sizeof(f));
    f[0]=1; 
    for(int i=1; i<=n; i++)
      for(int j=a[i];j<=a[n];j++)
        f[j]+=f[j-a[i]];
    
    ans=0;
    for(int i=1;i<=n;i++)
      if(f[a[i]]==1) ans++;    
    printf("%d\n",ans);
  }
}

 

#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

int n,a[105],f[25005],ans;

int main(){
  int T; scanf("%d",&T);
  while(T--){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
      scanf("%d",&a[i]);
    sort(a+1,a+n+1);
    
    memset(f,-63,sizeof f);
    f[0]=0; 
    for(int i=1;i<=n;i++)
      for(int j=a[i];j<=a[n];j++)
        f[j]=max(f[j],f[j-a[i]]+1);
        
    ans=0;  
    for(int i=1;i<=n;i++)
      if(f[a[i]]==1) ans++;
    printf("%d\n",ans);
  }
  return 0;
}

 

posted @ 2023-09-11 08:00  董晓  阅读(480)  评论(0)    收藏  举报