摘要:
思路:我只想说,while(head#include#include#include#include#define Maxn 110#define Maxm 10010#define inf 1000000000using namespace std;int dp[Maxn][Maxm],sum[Maxm],num[Maxn][Maxm];int que[Maxm*5];void init(){ memset(sum,0,sizeof(sum)); memset(num,0,sizeof(num));}inline int ReadInt(){ int flag = 1; ... 阅读全文
摘要:
思路:动态方程很容易想到dp[i][j]=max(dp[i][j],dp[i-w-1][j-k]-k*ap[i],dp[i-w-1][j+k]+k*bp[i]);dp[i][j]表示第i天拥有j个石头的最大价值。其实每次求得都是最有策略,所有dp[i-w-1]表示的就是i-w-1以前的最优,故不同往前遍历。那么主要需要优化的是:对于买石头,容量为j时,维护从j-k到j的转移最大值。即从哪个容量转移过来能得到最大效益。对于卖石头,容量为j时,维护从j+k到j的转移最大值。即从哪个容量转移过来能得到最大效益。见代码:#include#include#include#include#include# 阅读全文
摘要:
思路:我们用单调队列保存2*b#include#include#include#include#define inf 10000010#define Maxn 1010#define Min(a,b) (a)>(b)?(b):(a)using namespace std;int dp[1000010],que[1000010],head,rear,interv[1200010];struct Inter{ int l,r; int operator=inf) printf("-1\n"); else printf("%d\n",dp[l]); } 阅读全文