您的位置:首页 > 其它

POJ 2229 Sumsets

2016-03-23 16:16 239 查看
dp[i][j]表示i这个数字用前j个来拼凑有几种方案。

我写的时间复杂度是o(20000000),理论上打个表,然后o(1)输出妥妥的可以AC。

但是后台居然是一个文件一组数据的。。。。。。

做了点优化之后,C++ 压线AC 正好2000ms,G++1200ms。

此外,这题应该是可以找规律AC的。

1530373314rj1342229Accepted86572K1329MSG++564B2016-03-23 16:08:51
1530373014rj1342229Accepted86352K2000MSC++564B2016-03-23 16:08:30
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;

int dp[1000000+10][22];
int a[100];
const int mod=1000000000;
int n;

void work()
{
a[1]=1;
for(int i=2;i<=20;i++) a[i]=a[i-1]*2;
// memset(dp,0,sizeof dp);
for(int i=1;i<=20;i++) dp[0][i]=1;
for(int j=1;j<=n;j++)
{
for(int i=1;i<=20;i++)
{
if(a[i]>j) {dp[j][i]=dp[j][i-1];continue;}
dp[j][i]=(dp[j][i-1]+dp[j-a[i]][i])%mod;
}
}
}

int main()
{
scanf("%d",&n);
work();
printf("%d\n",dp
[20]);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: