Browsing History http://acm.hdu.edu.cn/showproblem.php?pid=4464
签到
#include<cstdio>
#include<algorithm>
using namespace std;
char a[];
int main(){
int n,cas=;
while(~scanf("%d",&n)){
int ans=;
while(n--){
scanf("%s",a);
int sum=;
for(int i=;a[i];i++){
sum+=a[i];
}
ans=max(ans,sum);
}
printf("Case %d: %d\n",cas++,ans);
}
return ;
}
Count http://acm.hdu.edu.cn/showproblem.php?pid=4472
dp i 表示个数为i的种类数,它的第二层可以有很多种情况 只要能整除 这是记忆化搜索的写法。
#include<cstdio>
#include<cstring>
#define mt(a,b) memset(a,b,sizeof(a))
const int M=;
const int mod=1e9+;
int dp[M];
int dfs(int n){
if(~dp[n]) return dp[n];
dp[n]=;
for(int i=;i<=n;i++){
if((n-)%i==){
dp[n]+=dfs((n-)/i);
dp[n]%=mod;
}
}
return dp[n];
}
int main(){
mt(dp,-);
dp[]=;
for(int i=;i<M;i++){
dp[i]=dfs(i);
}
int n,cas=;
while(~scanf("%d",&n)){
printf("Case %d: %d\n",cas++,dp[n]);
}
return ;
}
人人为我写法
#include<cstdio>
const int M=;
const int mod=1e9+;
int dp[M];
int main(){
dp[]=;
for(int i=;i<M;i++){
dp[i]=;
for(int j=;j<=i;j++){
if((i-)%j==){
dp[i]+=dp[(i-)/j];
dp[i]%=mod;
}
}
}
int n,cas=;
while(~scanf("%d",&n)){
printf("Case %d: %d\n",cas++,dp[n]);
}
return ;
}
我为人人写法
#include<cstdio>
#include<cstring>
#define mt(a,b) memset(a,b,sizeof(a))
const int M=;
const int mod=1e9+;
int dp[M];
int main(){
mt(dp,);
dp[]=;
for(int i=;i<M;i++){
for(int j=;(j*i+)<M;j++){
dp[j*i+]+=dp[i];
dp[j*i+]%=mod;
}
}
int n,cas=;
while(~scanf("%d",&n)){
printf("Case %d: %d\n",cas++,dp[n]);
}
return ;
}
end