2 条题解
-
5马然 LV 7 @ 2019-01-20 15:24:56
十个for暴搜即可,O(3^10)复杂度
#include <iostream> using namespace std; int n,all; int main() { int i,j; while(cin>>n) { all=0; if(n<10||n>30) cout<<0<<endl; else { for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) for(int k=1;k<=3;k++) for(int l=1;l<=3;l++) for(int m=1;m<=3;m++) for(int N=1;N<=3;N++) for(int o=1;o<=3;o++) for(int p=1;p<=3;p++) for(int q=1;q<=3;q++) for(int r=1;r<=3;r++) if(i+j+k+l+m+N+o+p+q+r==n) all++; cout<<all<<endl; for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) for(int k=1;k<=3;k++) for(int l=1;l<=3;l++) for(int m=1;m<=3;m++) for(int N=1;N<=3;N++) for(int o=1;o<=3;o++) for(int p=1;p<=3;p++) for(int q=1;q<=3;q++) for(int r=1;r<=3;r++) if(i+j+k+l+m+N+o+p+q+r==n) cout<<i<<" "<<j<<" "<<k<<" "<<l<<" "<<m<<" "<<N<<" "<<o<<" "<<p<<" "<<q<<" "<<r<<endl; } } return 0; }
-
32019-01-20 09:04:49@
本题有个小小的坑点:因为每种作料要撒1-3克,共10种作料。所以当总克数小于10或大于30时显然不可以,直接得答案。
#include<iostream> using namespace std; int n,kind=0,m1[10000][10],m2[10]; void rec(int,int); int main() { cin>>n; if(n>30||n<10)//直接得答案 { cout<<0<<endl; return 0; } rec(0,0); cout<<kind<<endl; for (int j=0;j<kind;j++) { for (int i=0;i<10;i++) cout<<m1[j][i]<<" "; cout<<endl; } return 0; } void rec(int total,int depth)//10-30时暴力深搜 { if (depth==10) { if (total==n) { for (int j=0;j<10;j++) m1[kind][j]=m2[j]; kind++; } } else if (total>=n) return ; else { for (int i=1;i<=3;i++) { m2[depth]=i; rec(total+i,depth+1); } } }
- 1
信息
- 难度
- 5
- 分类
- (无)
- 标签
- (无)
- 递交数
- 123
- 已通过
- 42
- 通过率
- 34%
- 被复制
- 7
- 上传者