普通篇
HDU1171
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
int t1[8100],t2[8100] ;
/*
i:第I个表达式
j:第j个变量
k:乘第i个表达式子(1+x^i + x^2i + ...)
*/
int main(){
int num[4] ={0};
while(cin>>num[1]>>num[2]>>num[3]){
if(num[1]+num[2]+num[3]==0)break;
int n = num[1]+num[2]*2+num[3]*5 ;
for(int i=0; i<=n ;++i){
t1[i] = t2[i] = 0;
}
int t[4] = {0,1,2,5};
for(int i=0; i<=num[1]; ++i){
t1[i] = 1;
}
for(int i=2; i<=3; ++i){
for(int j=0; j<=n; ++j){
for(int k=0; k<=num[i]; k++){
t2[j+t[i]*k] += t1[j];
}
}
for(int k=0; k<=n; ++k){
t1[k] = t2[k];
t2[k] = 0;
}
}
int ans = -1;
for(int i=0; i<=n; ++i){
if(!t1[i]) {
ans=i;
break;
}
}
if(ans!=-1){
cout << ans << endl;
}
else {
cout << n+1 << endl;
}
}
return 0;
}
#include <iostream>
#include <cstdio>
using namespace std;
long long t1[350],t2[350] ;
/*
i:第I个表达式
j:第j个变量
k:乘第i个表达式子(1+x^i + x^2i + ...)
*/
int main(){
int n ;
while(cin >> n && n){
for(int i=0; i<=n; ++i){
t1[i] = 1;
t2[i] = 0;
}
for(int i=2; i*i<=n ; ++i){
for(int j=0; j<=n; ++j){
for(int k=0; k+j<=n; k+=i*i){
t2[k+j] += t1[j];
}
}
for(int k=0; k<=n; ++k){
t1[k] = t2[k];
t2[k] = 0;
}
}
cout << t1[n] << endl;
}
return 0;
}
#include <iostream>
#include <cstdio>
using namespace std;
long long t1[350],t2[350] ;
/*
i:第I个表达式
j:第j个变量
k:乘第i个表达式子(1+x^i + x^2i + ...)
*/
int main(){
int n;
while(cin >> n){
for(int i=0; i<=n; ++i){
t1[i] = 1;
t2[i] = 0;
}
for(int i=2; i<=n; ++i){ // biaodashi
for(int j=0; j<=n; ++j){ // dijge
for(int k=0; k+j<=n; k+=i){//chengdiige
t2[j+k] += t1[j]; //xishu
}
}
for(int k=0; k<=n; ++k){
t1[k] = t2[k];
t2[k] = 0;
}
}
cout<<t1[n]<<endl;
}
return 0 ;
}