这个题真的是贪心吗

P1230 智力大冲浪

不要怀疑,就是贪心
by _l_l_l_l_l_ @ 2021-09-25 17:37:52


@[WenZKbb](/user/522828) 求大佬指点QWQ
by pencil @ 2021-09-25 17:41:52


@[pencil](/user/137723) 这题好久之前做的,忘的差不多了,所以就把代码扔出来吧 里面有注释 ``` #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int m,n; bool vis[505]={false};//vis[i]--第i个时间段用没用 struct riddle { int t,w; }a[505]; bool cmp(riddle x,riddle y) { if(x.w!=y.w)return x.w>y.w; return x.t<y.t; } int main() { scanf("%d%d",&m,&n); for(int i=1;i<=n;i++) scanf("%d",&a[i].t); for(int i=1;i<=n;i++) scanf("%d",&a[i].w); sort(a+1,a+n+1,cmp); for(int i=1;i<=n;i++) { bool done=false;//这个任务能否完成 for(int j=a[i].t;j>=1;j--)//贪心策略:尽量在晚完成,为前面腾出时间 { if(!vis[j])//放在j做 { vis[j]=1; done=1; break; } } if(!done) m-=a[i].w;//接受惩罚 } if(m<0) m=0; printf("%d\n",m); return 0; } ```
by _l_l_l_l_l_ @ 2021-09-25 17:44:15


@[pencil](/user/137723) ```cpp #include <bits/stdc++.h> using namespace std; #define MAXN 505 #define MAXH 5005 int m, n; bool vis[MAXN]; struct node { int t, w; } a[MAXN]; bool cmp(node a, node b) {return a.w > b.w;} int main(){ cin >> m >> n; for (int i = 1; i <= n; i++) cin >> a[i].t; for (int i = 1; i <= n; i++) cin >> a[i].w; sort(a + 1, a + 1 + n, cmp); for (int i = 1; i <= n; i++) { for (int j = a[i].t; ; j--) { if (!j) { m -= a[i].w; break; } if (!vis[j]) { vis[j] = 1; break; } } } cout << m << endl; return 0; } ```
by liuzimingc @ 2021-09-26 14:06:01


hihi
by zhubin2021 @ 2022-07-13 18:45:00


可以反悔贪心 优先做时间短的 时间相同的优先做扣的钱数多的。发现更优就反悔
by hyf9134 @ 2022-07-26 21:52:50


|