吴神,人类的希望(1721)
2013-06-07 13:26
232 查看
题意:给出一个数,把其分成不同的数的组合的和是这样的数,且满足两一个分出来的数要大于等于K
求这样的组合有多少个
思路:就是用DFS依次搜索分出的数的组合个数(一定要是增序的,不然会有更多结果)
但只是DFS会超时的,这样就可以用dp[i][j]来记录其计算过的值。其意思是i的数
当然选的是j大的数(所以后面的搜索就不能小于这个数了)
但是用时还是挺多的,都差点没有过了,,感觉这样做很暴力。
在网上看到的一个高效算法:
只要6MS
接下来有T行,每行有两个整数n k (1<=n,k<=1000)
2 1
4 2
6 2
2
4
求这样的组合有多少个
思路:就是用DFS依次搜索分出的数的组合个数(一定要是增序的,不然会有更多结果)
但只是DFS会超时的,这样就可以用dp[i][j]来记录其计算过的值。其意思是i的数
当然选的是j大的数(所以后面的搜索就不能小于这个数了)
但是用时还是挺多的,都差点没有过了,,感觉这样做很暴力。
#include<iostream> #include<cstdio> #include<cstring> using namespace std; #define N 1001 #define M 1000000007 int dp ; bool vis ; int t; int n,k; int dfs(int i,int j) { if (vis[i][j]) return dp[i][j]; dp[i][j]=0; for (int cur=j;cur<=i;cur++) { dp[i][j]+=dfs(i-cur,cur); dp[i][j]%=M; } vis[i][j]=true; return dp[i][j]; } int main() { freopen("in.txt","r",stdin); int i,j; memset(vis,false,sizeof(vis)); vis[0][0]=true; dp[0][0]=1; for (i=1;i<N;i++) { dp[0][i]=1; vis[0][i]=true; } cin>>t; while (t--) { scanf("%d%d",&n,&k); printf("%d\n",dfs(n,k)); } return 0; }
在网上看到的一个高效算法:
只要6MS
#include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<cmath> #include<string> #include<vector> #include<algorithm> #include<map> #include<set> #define maxn 200005 #define eps 1e-8 #define inf 1<<30 #define LL long long #define zero(a) fabs(a)<eps #define MOD 1000000007 using namespace std; int c[1005][1005]={0}; void Init(){ for(int i=0;i<=1000;i++){ c[i][0]=0;c[i][1]=1;c[i][i]=1; for(int j=1;j<i;j++) c[i][j]=(c[i-1][j-1]+c[i-j][j])%MOD; } } int main(){ int t,n,k; Init(); scanf("%d",&t); while(t--){ scanf("%d%d",&n,&k); int ans=0; for(int m=1;m<=n/k;m++) ans=(ans+c[n-m*k+m][m])%MOD; printf("%d\n",ans); } return 0; }
吴神,人类的希望
Time Limit: 1000 ms Memory Limit: 65535 kB Solved: 60 Tried: 167
Submit
Status
Best Solution
Back
Description
公元18906416年,由于歌者无节制的使用二向箔,整个宇宙都将不可避免的跌入二次元。为了拯救学弟们,吴神决定使用一种叫smxrwzdx的基本粒子创造一个新的宇宙,吴神发现,用不同数量的smxrwzdx可以组合成不同的粒子,比如用两个smxrwzdx就可以组成一个魔理沙,三个smxrwzdx就可以组成一个洛天依,总之,无论怎样组合,都会产生一个好的结果(不要吐槽,吴神就是有这么神),现在吴神有n个smxrwzdx粒子,为了保持新宇宙的稳定性,吴神要求所组成每一种物质都必须至少包含k个smxrwzdx粒子,现在吴神想知道的是,如果他有n个smxrwzdx,有多少种不同的世界能够被创造出来。比如吴神有6个smxrwzdx,k为2。那么吴神可以有4种方案:(2,2,2)(4,2)(3,3)(6)。Input
第一行有个整数T,代表数据组数(T<=10^6)接下来有T行,每行有两个整数n k (1<=n,k<=1000)
Output
每组数据输出一行,表示吴神有多少种不同的世界能够被创造出来,由于答案可能很大,所以答案要模10^9+7。Sample Input
32 1
4 2
6 2
Sample Output
22
4
相关文章推荐
- UESTC 1721 吴神,人类的希望(组合计数)
- uestc 1721 吴神,人类的希望
- UESTC 1721:吴神,人类的希望_n个相同的球放进m个相同的盒子的问题
- UESTC cdoj 619 吴神,人类的希望 (组合数学)
- 机器在俯视人类,是我们的希望还是恐惧?
- 范宇飞主任:干细胞治疗为人类逆转肝硬化带来希望
- 苹果希望彻底更改人类工作的方式
- 机器在俯视人类,是我们的希望还是恐惧?
- Hrbust 1865 人类希望——kokoII【记忆化搜索】
- 看了后有点担忧,希望人类最后不要这样
- 人类创造了工具,并希望通过工具控制一切
- hrbust 1864人类希望——kokoⅠ【数学+快速幂】
- hrbust 1865人类希望——kokoⅡ【思维】
- 机器在俯视人类,是我们的希望还是恐惧?
- swift单节点配置遇到的一些问题和解决办法,希望大家补充
- Web开发:我希望得到的编程学习路线图
- Scroview的一些常用设置 希望能上
- 新账号开博了,希望有志同道合的朋友来捧场,呵呵。
- 有时候不希望别人看到你的网页的源代码怎么办?看下面的代码吧!
- 人类难道真的无法阻止海天了?