1 solutions

  • 0
    @ 2023-10-20 21:22:20

    难度: 自己觉得大概是黄绿左右,但洛谷里的 n10000n\le10000 的情况是蓝。

    算法: 深度优先搜索

    连剪枝都不用,直接搜。

    有几个注意事项,看注释:

    #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