随笔分类 - 贪心
合并石子问题 贪心+最大最小堆基本操作
摘要:给定k个序列s1,s2,s3,...,sk,用二路合并方法将k个序列合并为一个。假设将任意两个长度分别为n和m的序列合并为一个需要的代价是m+n-1,设计一个算法来确定合并这些序列的合并为一个的最大代价和最小代价。#include<iostream>using namespace std;void swap(int &a ,int &b){ int temp=a; a=b; b=temp;}//返回数组arr[]的最大值void maxSink(int arr[],int n,int i){ int child; int j=i; while(j<=n/2){
阅读全文
POJ 2586盈亏表-贪心策略
摘要:该题,对题目的理解是关键。。。(好恶心)http://poj.org/problem?id=2586题意:有一个公司由于某个病毒使公司赢亏数据丢失,但该公司每月的赢亏是一个定数,要么一个月赢利s,要么一月亏d。现在ACM只知道该公司每五个月有一个赢亏报表,而且每次报表赢利情况都为亏。在一年中这样的报表总共有8次(1到5,2到6,…,8到12),现在要编一个程序确定当赢s和亏d给出,并满足每张报表为亏的情况下,全年公司最高可赢利多少,若存在,则输出多多额,若不存在,输出"Deficit"。分析:在保证连续5个月都亏损的前提下,使得每5个月中亏损的月数最少。 x=1: ssss
阅读全文
最长上升子序列 DP+贪心算法
摘要:最初没有多想,直接用最基本的DP写的代码,本想水过,可是测试数据超时。。。DP O(n*n)算法代码:#include<iostream>using namespace std;int main(){ const int SIZE = 1005; int dp[SIZE]; int arr[SIZE]; int n; while(cin>>n&&n!=0){ int max = 1; for(int i=1;i<=n;i++){ cin>>arr[i]; dp[i]=1; ...
阅读全文
POJ1042-Gone Fishing 贪心经典
摘要:http://poj.org/problem?id=1042此题没有AC成功,因为每个湖的时间输出有一定的顺序要求,目前还不知道怎么处理。。。#include<iostream>using namespace std;struct Lake{ int id; int time; int num; int decr; bool operator > (const Lake &a)const{ return num > a.num; } void operator =( Lake &a){ id=a.id; tim...
阅读全文
浙公网安备 33010602011771号