Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。
・問題 "My friends are small"
https://onlinejudge.u-aizu.ac.jp/problems/2333
・僕の友達は小さい
僕が作成、提出したコードは、以下のとおりです。
Aizu Online Judge in C++ #Volume23 : 2333 - My friends are small
/* Aizu Online Judge in C++ #Volume23 : 2333 - My friends are small https://onlinejudge.u-aizu.ac.jp/problems/2333 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; ll n,w,dp[11111],a[222],sum,ans; int main(void){ cin>>n>>w; for(ll i=0;i<n;i++){ cin>>a[i]; } sort(a,a+n); for(ll i=0;i<n;i++){ memset(dp,0,sizeof(dp)); if(sum>w){ break; } dp[sum]=1; for(ll j=i+1;j<n;j++){ for(ll k=w;k>=sum+a[j];k--){ (dp[k]+=dp[k-a[j]])%=1000000007; } } for(ll j=sum;j<=w;j++){ if(j+a[i]>w){ (ans+=dp[j])%=1000000007; } } sum+=a[i]; } if(sum<=w){ ans++; } cout<<ans<<endl; return 0; }
設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/