1 solutions
-
0
难度: 自己觉得大概是黄绿左右,但洛谷里的 的情况是蓝。
算法: 深度优先搜索
连剪枝都不用,直接搜。
有几个注意事项,看注释:
#include<bits/stdc++.h> using namespace std; int n,d[111]; vector<int> e[111]; void se(vector<int> v){ int l=v.size(); for(int i=l-1;i>=0;i--){//从大到小搜 for(int j=l-1;j>=0;j--){ if(v[i]+v[j]<=v[l-1]) break; if(v[i]+v[j]>100) continue; if(d[v[i]+v[j]]<l+1) continue;//不要写成<= v.push_back(v[i]+v[j]); d[v[i]+v[j]]=l+1; e[v[i]+v[j]]=v; se(v); v.pop_back(); } } return ; } int main(){ memset(d,0x3f3f3f,sizeof(d)); e[1].push_back(1);//要保证e[1]里有一个1 se(e[1]); while(true){ scanf("%d",&n); if(n==0) return 0; for(int i=0;i<int(e[n].size());i++) printf("%d ",e[n][i]); printf("\n"); } }
- 1
Information
- ID
- 22
- Time
- 1000ms
- Memory
- 512MiB
- Difficulty
- 7
- Tags
- # Submissions
- 17
- Accepted
- 8
- Uploaded By