0
已解决
王子逸
新手天翼
新手天翼
错误代码
#include<bits/stdc++.h>
using namespace std;
int n, c;
int a[10010], data[10010], v[10010];
int sum = 0;
int flag;
void print(int dep)
{
for(int i = 1;i<=dep;i++)
{
if(i<dep) cout<<data[i]<<' ';
else cout<<data[i]<<endl;
}
}
void dfs(int dep)
{
for(int i = 1;i<=n;i++)
{
if(!v[i]&&c>=a[i])
{
c -= a[i];
data[dep] = a[i];
v[i] = 1;
if(c == 0)
{
if(flag == 0)
{
print(dep);
flag = 1;
}
return;
}
else(dfs(dep+1));
c += a[i];
v[i] = 0;
}
}
}
int main()
{
cin>>n>>c;
for(int i = 1;i<=n;i++)
{
cin>>a[i];
sum+=a[i];
}
if(sum<c)
{
cout<<"No Solution!"<<endl;
return 0;
}
memset(data, 0, sizeof(data));
memset(v, 0, sizeof(v));
dfs(1);
if(flag == 0)
{
cout<<"No solution!"<<endl;
}
}
WA 70;
X_X
王子逸在2020-07-10 16:37:30追加了内容
已AC 给出思路 核心者采纳!
王子逸在2020-07-10 17:30:11追加了内容
另外 历代boss没有分的吗?
王子逸在2020-07-10 17:31:28追加了内容
就是5217
没经验值也就算了
但没分是怎么回事
我都AC了啊
一百多行代码就这样没了?
王子逸在2020-07-10 17:33:24追加了内容
0
已采纳
包涵宇
中级天翼
中级天翼
你的代码我是没看懂,献上我的核心:
void dfs(int p,int t,int c){
if(c>s||p>n)return ;
if(s==c){
for(int i=1;i<t;i++)cout<<b[i]<<" ";//输出
exit(0);//实现在主程序外实现return 0的效果
}
if(c+sa[p]<s||c+ma[p]>s)return ;//剪枝,自己理解
//下面这三行代替了你的循环,简便
b[t]=a[p];
dfs(p+1,t+1,c+a[p]);//选
dfs(p+1,t,c);//不选
}
ps:dfs这样调用:dfs(1,1,0);
你70分应该就是少了剪枝
注:
ma[x]的定义:从N到X最小的数
sa[x]的定义:从N到X的数之和
剪枝部分自己理解,其他自己补全
0
李瑞曦
高级天翼
高级天翼
没有经验值
历代boss没有得分,模拟赛的题也没有哦~
李瑞曦在2020-07-10 17:57:43追加了内容
至于1047嘛,我的回答是:还没做呢。不要问我为什么,因为我还懒得做(其实是因为我还不会做~~哈哈哈)
0