• HDU 1051 Wooden Sticks 贪心题解


    本题一看就知道是最长不减序列了,一想就以为是使用dp攻克了。

    只是那是个错误的思路。

    我就动了半天没动出来。然后看了看别人是能够使用dp的,只是那个比較难证明其正确性,而其速度也不快。故此并非非常好的解决方法。

    所以我就直接硬算。硬模拟选择出非减子序列,选完就出答案了。

    思路:

    1 依照长度排序

    2 依照不减原则选择重量,选一个,消灭一个。

    最后消灭完了,就处理完成,答案就自然出来了。

    原来是一道披着dp的外套的模拟题啊!一道伪装成难题的简单题。

    代码也能够写的非常简洁:

    #include <stdio.h>
    #include <vector>
    #include <string.h>
    #include <algorithm>
    #include <iostream>
    #include <string>
    #include <limits.h>
    #include <stack>
    #include <queue>
    #include <set>
    #include <map>
    using namespace std;
    int N;
    const int MAX_N = 5001;
    pair<int, int> arr[MAX_N];
    
    int calIncrese()
    {
    	int ans = 0;
    	sort(arr, arr+N);	
    	for (int i = 0; i < N; i++)
    	{
    		if (arr[i].second == INT_MIN) continue;
    		int wei = arr[i].second;
    		ans++;
    		for (int j = i+1; j < N; j++)
    		{
    			if (arr[j].second >= wei)
    				wei = arr[j].second, arr[j].second = INT_MIN;
    		}
    	}
    	return ans;
    }
    
    int main()
    {
    	int T;
    	scanf("%d", &T);
    	while (T--)
    	{
    		scanf("%d", &N);
    		for (int i = 0; i < N; i++)
    		{
    			scanf("%d %d", &arr[i].first, &arr[i].second);
    		}
    		printf("%d
    ", calIncrese());
    	}
    	return 0;
    }
    



  • 相关阅读:
    LCA最近公共祖先Tarjan(离线)
    51nod 1135 原根
    51nod 1134最长递增子序列
    51nod 1130 斯特林公式
    51nod 1186 Miller-Rabin素数测试
    51Nod 1257 背包问题 V3
    另类求组合数
    Gym
    msp430项目编程45
    msp430项目编程44
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8523920.html
Copyright © 2020-2023  润新知