即求P1^n1+P2^n2 + ... + Pk^nk <= n,其中Pk为素数的所有可能组合。
思路是DP。1~1000的素数就不到200个。
dp[i][j]表示上式和不超过且当前最小素数为P[j]的所有可能情况。注意dp[i][0]+1即为所求。

 /* 4345 */
#include <iostream>
#include <sstream>
#include <string>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#include <deque>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <ctime>
#include <cstring>
#include <climits>
#include <cctype>
#include <cassert>
#include <functional>
#include <iterator>
#include <iomanip>
using namespace std;
//#pragma comment(linker,"/STACK:102400000,1024000") #define sti set<int>
#define stpii set<pair<int, int> >
#define mpii map<int,int>
#define vi vector<int>
#define pii pair<int,int>
#define vpii vector<pair<int,int> >
#define rep(i, a, n) for (int i=a;i<n;++i)
#define per(i, a, n) for (int i=n-1;i>=a;--i)
#define clr clear
#define pb push_back
#define mp make_pair
#define fir first
#define sec second
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define lson l, mid, rt<<1
#define rson mid+1, r, rt<<1|1 const int maxn = ;
bool isPrime[maxn];
int P[maxn], pn = ;
__int64 dp[maxn][];
__int64 ans[maxn]; void init() {
memset(isPrime, true, sizeof(isPrime));
rep(i, , maxn) {
if (isPrime[i]) {
P[pn++] = i;
for (int j=i*i; j<maxn; j+=i)
isPrime[j] = false;
}
} #ifndef ONLINE_JUDGE
printf("pn = %d\n", pn);
#endif
ans[] = ;
rep(i, , ) {
rep(j, , pn) {
if (P[j] > i)
break;
for (int k=P[j]; k<=i; k*=P[j]) {
dp[i][j] += dp[i-k][j+] + ;
}
}
per(j, , )
dp[i][j] += dp[i][j+];
ans[i] = dp[i][] + ;
} #ifndef ONLINE_JUDGE
rep(i, , )
printf("%d: %I64d\n", i, ans[i]);
#endif
} int main() {
ios::sync_with_stdio(false);
#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif int n; init(); while (scanf("%d", &n)!=EOF)
printf("%I64d\n", ans[n]); #ifndef ONLINE_JUDGE
printf("time = %d.\n", (int)clock());
#endif return ;
}

最新文章

  1. spring mvc 配置文件拦截器过滤url
  2. LeetCode:Word Break(DP)
  3. BestCoder Round #11 题解集合
  4. GS LiveMgr心跳管理类
  5. Brief描述子
  6. 【Unity编程】四元数(Quaternion)与欧拉角
  7. ESL翻译:Linear Methods for Regression
  8. 【python】内部函数
  9. Glad to see you! CodeForces - 810D (交互+二分)
  10. spring boot之mybatis配置
  11. JavaScript使用childNodes和children
  12. mock获取入参数并动态设置返回值
  13. create a simple COM object
  14. APP-7-百度地图移动轨迹
  15. 【慕课网实战】Spark Streaming实时流处理项目实战笔记十二之铭文升级版
  16. Git for Windows之基础环境搭建与基础操作
  17. [李居丽][다이아몬드][Diamond]
  18. 微信公众号开发之如何使用JSSDK
  19. Linux History安全问题【保存记录防止删除】+完善Linux/UNIX审计 将每个shell命令记入日志
  20. 将Spring容器跟随系统启动并获取容器对象

热门文章

  1. 【Winform】 Enum逆向解析
  2. C# login with cookie and fiddler2
  3. RHEL 6.5升级GCC 4.9.3
  4. Angular之【form提交问题】
  5. django1.6之template基础用法
  6. [Learn Android Studio 汉化教程]第二章:Android Studio概述(一)
  7. Hive[5] HiveQL 数据操作
  8. android studio 打开github开源代码
  9. IOS开发之表视图添加索引
  10. EXTJS4.2 时间动态刷新显示