标签:int 表示 正整数 现在 数字 策略 style tle turn
每组数据输入一个数n(n<=100000)
每组数据输出一行,小于等于n的幸运数个数。
21
3
#include <cstdio> //主要思想:可以采用存储答案的策略,避免重复计算 const int maxn=100002; int dp[maxn]={0}; int f(int n){ int t=0; while(n != 0){ t += (n % 10); n /= 10; } return t; } int g(int n){ int t=0; while(n != 0){ t += (n % 2); n /= 2; } return t; } int main(){ int i, n, ans; while(scanf("%d", &n) != EOF){ if(dp[n] > 0) printf("%d\n", dp[n]); else{ ans = 0; for(i=1; i<=n; i++){ if(dp[i] > 0) ans += dp[i]; else if(f(i) == g(i)) ans++; } dp[n] = ans; printf("%d\n", ans); } } return 0; }
这题不是很难,记录下来的原因是,想告诉自己,某些情况可以选择牺牲空间换取时间的策略:即选择保存答案,避免重复计算。
标签:int 表示 正整数 现在 数字 策略 style tle turn
原文地址:https://www.cnblogs.com/heyour/p/12540402.html