标签:
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=121539#problem/L
My Solution
dfs就好, 好久没用写dfs了,简单dfs还是Debug了好长时间, 尴尬⊙﹏⊙‖∣
记得把那些转移的东西写在参数里
读入char类型, 记得看看要不要用getchar吸掉换行空格什么的
#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
typedef long long LL;
const int maxn = 28;
int val[maxn];
char plusmi[maxn];
int ans, n;
void dfs(int k, int sum, int q)
{
if(k == n){
if(sum == 0) ans = min(ans, q);
return;
}
for(int i = 0; i < 2; i++){
if(i == 0){
if(plusmi[k] == '-') dfs(k+1, sum + val[k], q + 1);
else dfs(k+1, sum + val[k], q);
}
else{
if(plusmi[k] == '+') dfs(k+1, sum - val[k], q + 1);
else dfs(k+1, sum - val[k], q);
}
}
}
int main()
{
#ifdef LOCAL
freopen("a.txt", "r", stdin);
//freopen("b.txt", "w", stdout);
int T = 2;
while(T--){
#endif // LOCAL
scanf("%d", &n);
scanf("%d", &val[0]);
for(int i = 1; i < n; i++){
getchar();
scanf("%c", &plusmi[i]);
scanf("%d", &val[i]);
}
/*
printf("%d", val[0]);
for(int i = 1; i < n; i++)
printf("%c%d",plusmi[i] , val[i]);
*/
ans = 1000;
dfs(1,val[0], 0);
if(ans != 1000) printf("%d", ans);
else printf("-1");
#ifdef LOCAL
printf("\n");
}
#endif // LOCAL
return 0;
}
Thank you!
------from ProLights
UESTC 2016 Summer Training #1 Div.2 L - Plus or Minus (A) dfs
标签:
原文地址:http://blog.csdn.net/prolightsfxjh/article/details/51892721