POJ 3265 模拟 贪心 的错误用法
来源:互联网 发布:数控车倒螺纹编程实例 编辑:程序博客网 时间:2024/05/16 01:03
http://poj.org/problem?id=3265
题目大意:有P (1 <= P <= 300) 道题目(必须依次完成)、月薪是M (1 <= M <= 1000) 元。要雇帮手来答题,可以解决一个月内的所有题目,第一笔A_i(1 <= A_i <= M)元在做题的那一个月初支付,第二笔B_i元(1 <= B_i <= M)在做完后的下一个月初支付。每一个月牛们用上一个月挣的钱来付款,且不会节余给下一个月。求做完所有题目并支付完所有款项的最短月数。
我第一演看上去就坚定不移的认为这个是贪心于是高高兴兴写了个,样例通过,提交!WA....
当时我无法理解为什么错了,很明显啊,有钱就尽量用,Oct gap 201大神给我了一个数据:
4 3
1 2
1 2
1 2
很明显:最优是 第二天做一个 然后 第三天做完 这样只要4天
但是贪心的话 第二天做了1 2 第三天不干事情 第四天做3 这样要5天..
为什么会多出来一天?很明显 是因为贪心没有考虑到后面的情况,原来可以将后面一天的时间搭配,充分利用,但是贪心只注重了当前的利益,而忽略了长远的利益.....
于是只能乖乖写DP了.
貌似有2种DP方法,我用的是:
F[I,J]表示做了[1,J]在最后一个月里已经首付了[I,J]的情况下最短的月数,
F[I,J]:=MIN{F[K,I-1]+1|A[J]-A[I-1]+B[I-1]-B[K-1]<M,F[K,I-1]+2|A[J]-A[I-1]<=M and B[I-J]-B[K-1]<=M} (B[J]-B[I-1]<=M)A B 分别为前缀和
答案是F[I,N]中最小的一个
code:
var n,m,i,j,k,x,y,ans:longint; f:array[0..500,0..500] of longint; a,b:array[-5..1000] of longint;begin read(m,n); fillchar(f,sizeof(f),0); fillchar(a,sizeof(a),0); fillchar(b,sizeof(b),0); f[0,0]:=1; for i:=1 to n do begin read(x,y); a[i]:=a[i-1]+x; b[i]:=b[i-1]+y;end; for i:=1 to n do for j:=i to n do if ((a[j]-a[i-1])<=m) and ((b[j]-b[i-1])<=m) then begin x:=a[j]-a[i-1]; f[i,j]:=maxlongint; for k:=0 to i-1 do begin if (f[k,i-1]>0) and ((x+b[i-1]-b[k-1])<=m) then if (f[k,i-1]+1)<f[i,j] then f[i,j]:=f[k,i-1]+1; if (f[k,i-1]>0) and ((b[i-1]-b[k-1])<=m) then if (f[k,i-1]+2)<f[i,j] then f[i,j]:=f[k,i-1]+2;end; if f[i,j]=maxlongint then f[i,j]:=0;end; ans:=maxlongint; for i:=1 to n do if (f[i,n]>0) and (f[i,n]<ans) then ans:=f[i,n]; ans:=ans+1; writeln(ans);end.
没几天就有NOIP成绩了。。求不爆!求RP++跪求400+!!!!!!!!!!!!!!!!!!
- POJ 3265 模拟 贪心 的错误用法
- POJ 1033 (模拟+贪心)
- POJ 1017 Packets 贪心 + 模拟
- 贪心+模拟-poj-1017-Packets
- poj 3040 Allowance 贪心+模拟
- POJ 1017 Packets 【贪心 模拟】
- Poj 3040 Allowance【贪心模拟】
- poj 1657 Distance on Chessboard(模拟贪心)
- POJ 1017 - Packets(贪心+模拟)
- POJ --3045--Cow Acrobats(贪心模拟)
- POJ 1042 Gone Fishing(模拟+贪心)
- poj-1548-Robots- 贪心+模拟 / 最小路径覆盖
- 【原创】【贪心优化暴力模拟】Flooded! POJ 1877
- POJ 3617 Best Cow Line(模拟+贪心)
- POJ 3465 Battle(优先队列+贪心模拟)
- poj 2709 painter 贪心 2017.10.10 模拟赛
- poj 1065简单的贪心
- POJ 3069 简单的贪心
- LeetCode Longest Common Prefix
- POJ 2299 Ultra-QuickSort
- 杭电ACM 2005 第几天?
- 在调用微软winhttp的WinHttpQueryHeaders函数时候遇到的问题
- 网游测试登陆的程序
- POJ 3265 模拟 贪心 的错误用法
- Html5 Canvas开发之画圆(时钟,贝塞尔曲线)和旋转缩放
- 《UNIX环境高级编程》apue源代码Ubuntu下的编译
- “无线连接未识别网络”的解决方法之一
- 辣妈是怎样炼成的
- Leetcode: Anagrams
- 第八章 自我反省的功夫
- 用于加密的哈希函数
- gcc 4.3.2 编译时 发生 error: redeclaration of C++ built-in type 'bool' 错误