贪心算法:排列算式

简介: 贪心算法:排列算式

题目描述

给出n数字,对于这些数字是否存在一种计算顺序,使得计算过程中数字不会超过3也不会小于0?

输入描述:

首行给出一个正整数t,(1≤t≤1000)代表测试数据组数


每组测试数据第一行一个正整数n,(1≤n≤500)


第二行包含n个以空格分隔的数字


输入保证每一个数字都是 −3, −2, −1, +0, +1, +2, +3 的其中一个。


输出描述:

每组测试数据输出一行,“Yes” or “No”


输入

2

4

+3 +2 -1 -2

5

+3 +2 +1 +0 +2

输出

Yes

No

说明

第一组依照 +3,−2,+2,−1 的顺序由左至右计算总和,过程会依序算得 3, 1, 3, 2,满足题目要求


很显然第二组不存在满足要求的计算顺序

#include <bits/stdc++.h>
#include<iostream>
using namespace std;
    int N, n, a[7], *cnt; 
    bool check() {
  int t = 0;
  for (int i = -3; i <= 3; i++) {
    t += i * cnt[i];
  }
  if (t > 3 || t < 0) 
        return false;
    t = min(cnt[-3], cnt[3]);
  cnt[-3] -= t;
  cnt[3] -= t;
  t = min(cnt[2], cnt[-1]);
  cnt[2] -= t;
  cnt[-1] -= t;
  cnt[1] += t;
  t = min(cnt[-3], cnt[1]);
  cnt[-3] -= t;
  cnt[1] -= t;
  cnt[-2] += t;
  if (cnt[-3] > 0) 
        return false;
  t = min(cnt[-2], cnt[1]);
  cnt[-2] -= t;
  cnt[1] -= t;
  cnt[-1] += t;
  t = min(cnt[3], cnt[-1]);
  cnt[3] -= t;
  cnt[-1] -= t;
  cnt[2] += t;  
  if (cnt[3] > 1) 
        return false;
  return true;
}
int main() {
  cin>>N;
  cnt = &a[3];
  while (N--) {
    memset(a, 0, sizeof(a));
    cin>>n;
    int t;
    for (int i = 1; i <= n; i++) {
      cin>>t;
      cnt[t]++;
    }
    if (check()) {
      cout<<"Yes\n";
    } else {
      cout<<"No\n";
    }
  }
  return 0;
}

目录
相关文章
|
6月前
|
算法
算法编程(二十八):重新排列单词间的空格
算法编程(二十八):重新排列单词间的空格
56 0
|
6月前
|
机器学习/深度学习 存储 算法
【算法训练-回溯算法 一】【排列问题】全排列、全排列II
【算法训练-回溯算法 一】【排列问题】全排列、全排列II
84 0
|
算法 测试技术 C++
C++二分算法习题:判断是否是完全平方数[容易]和排列箱子[容易]
C++二分算法习题:判断是否是完全平方数[容易]和排列箱子[容易]
|
算法 Java
【Java每日一题,字典序算法】下一个排列
【Java每日一题,字典序算法】下一个排列
|
3月前
|
算法 Java
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
51 0
|
5月前
|
算法
【经典LeetCode算法题目专栏分类】【第8期】滑动窗口:最小覆盖子串、字符串排列、找所有字母异位词、 最长无重复子串
【经典LeetCode算法题目专栏分类】【第8期】滑动窗口:最小覆盖子串、字符串排列、找所有字母异位词、 最长无重复子串
|
5月前
|
算法
【经典LeetCode算法题目专栏分类】【第2期】组合与排列问题系列
【经典LeetCode算法题目专栏分类】【第2期】组合与排列问题系列
|
6月前
|
人工智能 算法 数据可视化
【算法训练-数组 五】【数组组合】:下一个排列
【算法训练-数组 五】【数组组合】:下一个排列
43 0
【每日挠头算法题(8)】最后一个单词的长度|重新排列字符串
【每日挠头算法题(8)】最后一个单词的长度|重新排列字符串
|
机器学习/深度学习 算法 测试技术
C++前缀和算法的应用:DI序列的有效排列的原理、源码及测试用例
C++前缀和算法的应用:DI序列的有效排列的原理、源码及测试用例