博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CodeForces - 35D
阅读量:4613 次
发布时间:2019-06-09

本文共 1276 字,大约阅读时间需要 4 分钟。

题目:

题意:有一个农场,自己有m斤粮食,有n天,每天动物吃的量不同,那个动物的食量的是由他是从那天开始进这个农场确定的,后面不能再变,从这天进来后就必须吃到第n天,每天只能进来一个动物,问最后能被保留下来的动物数最大是多少

思路:

1.贪心+排序,既然他每天只能进入一个动物,而且动物进来后食量不变,而且进来知道吃多少天,那么相当于我们知道所有动物的消费粮食值是多少个,然后我们直接排序,选取最少的那几个即可 O(nlogn)

#include
#define maxn 100005#define mod 1000000007using namespace std;typedef long long ll;ll a[maxn],n,m;int main(){ freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); cin>>n>>m; for(int i=1;i<=n;i++){ cin>>a[i]; a[i]=a[i]*(n-i+1); } sort(a+1,a+n+1); int num=0; for(int i=1;i<=n;i++){ if(m>=a[i]){ m-=a[i]; num++; } else break; } printf("%d",num);}
View Code

2.DP ,一样和上面,我们可以知道每个动物的消费粮食值,我们可以转化为一个01背包问题, O(n*m),主要还是当dp题来练手

#include
#define maxn 100005#define mod 1000000007using namespace std;typedef long long ll;ll a[maxn],n,m;ll dp[maxn];int main(){ freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); cin>>n>>m; for(int i=1;i<=n;i++){ cin>>a[i]; a[i]=a[i]*(n-i+1); } for(int i=1;i<=n;i++){ for(int j=m;j>=a[i];j--){ dp[j]=max(dp[j],dp[j-a[i]]+1); } } printf("%d",dp[m]);}
View Code

 

转载于:https://www.cnblogs.com/Lis-/p/11541728.html

你可能感兴趣的文章
支持新版chrome,用webstorm编译形成css和sourcemap,调试sass和less源文件
查看>>
Climbing Stairs
查看>>
用来武装Firebug的十四款Firefox插件
查看>>
几种常用排序算法代码实现和基本优化(持续更新ing..)
查看>>
css样式之超出隐藏
查看>>
python-scrapy框架
查看>>
java.lang.OutOfMemoryError: bitmap size exceeds VM budget
查看>>
Java解惑精炼版(一)
查看>>
无法获得锁 /var/lib/dpkg/lock - open
查看>>
自己写数据库访问ORM
查看>>
多项式填坑。。?
查看>>
webapi同一个Controller多个函数
查看>>
ASP.NET Web API身份验证和授权
查看>>
C#模拟POST提交表单(一)--WebClient
查看>>
java socket来实现私聊和群聊-简易版
查看>>
Android中图片占用内存的计算
查看>>
java课后作业
查看>>
VUE:使用vue-cli脚手架无法安装npm install axios 的巨坑
查看>>
spring的事务嵌套
查看>>
[实变函数]3.1 外测度 (outer measure)
查看>>