0分代码:
#include<bits/stdc++.h>
using namespace std;
long long n,m,w[110],ans,dp[10010];
bool cmp(long long a,long long b){return a>b;}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>w[i];
sort(w+1,w+n+1,cmp);
for(int i=1;i<=n;i++){
for(int j=m;j>=1;j--){
if(w[i]<=j) dp[j]=max(dp[j],dp[j-w[i]]+w[i]);
if(dp[j]==m) ans++;
// cout<<dp[j]<<" ";
}
// cout<<endl;
}
cout<<ans;
return 0;
}
9分代码:
#include<bits/stdc++.h>
using namespace std;
long long n,m,w[110],ans,dp[10010]={1};
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>w[i];
for(int i=1;i<=n;i++){
for(int j=m;j>=1;j--){
if(j>w[i]) dp[j]=max(dp[j-w[i]]+w[i],dp[j]);
}
}
cout<<dp[m];
return 0;
}
为什么?是不是巧合?
另:
dp[10010]={1}
为什么一些代码上dp[0]赋1呢?