–是區間dp(好像dfs加神秘玄學剪枝也能過?)
首先,我們可以發現這個人走過的位置是乙個區域,而且區域內部的精靈要麼被抓,要麼消失了(總之就是與以後的轉移沒有關係)
所以,狀態定義:
f[l][r][t] :當這個人走過區間[l,r],且目前在l處,時間為t時的最大分值
注意,l,r的左右位置要根據大小自己判斷
然後我們又發現,現在這個人只有兩種方法:左走或右走
他肯定是走到他沒有走過的第乙個有精靈的房子前,因為他不可能無視他(不符合貪心原則)
所以,轉移方程:
看**,有點長(因為還要判斷這個精靈能否抓到)
最後,邊界就是 :
f[起始房子][起始房子][1]=0
還有可以離散化一下,因為有很多房子前沒有精靈,其實是沒用的
排一下序,編號放進乙個陣列就行,k也要放(看成是沒有價值,時間為1的精靈)
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn=105;
int n,k,m;
int a[maxn],b[maxn],t[maxn];
int w[maxn];
int maxt;
int f[maxn][maxn][2005];
int ans;
bool comp(const
int &x,const
int &y)
sort(w,w+1+m,comp);
memset(f,-1,sizeof(f));
for(int i=0;i<=m;i++)
if(a[w[i]]==k)
f[i][i][1]=0;
for(int time=1;time<=maxt;time++)
t=time+a[w[r+1]]-a[w[l]];
if(rif(t<=t[w[r+1]])
f[r+1][l][t]=max(f[r+1][l][t],f[l][r][time]+b[w[r+1]]);
else
f[r+1][l][t]=max(f[r+1][l][t],f[l][r][time]);}}
else
t=time+a[w[l+1]]-a[w[l]];
if(lif(t<=t[w[l+1]])
f[l+1][r][t]=max(f[l+1][r][t],f[l][r][time]+b[w[l+1]]);
else
f[l+1][r][t]=max(f[l+1][r][t],f[l][r][time]);}}
}ans=max(ans,f[l][r][time]);}}
}cout
0;}
577 員工獎金
選出所有 bonus 1000 的員工的 name 及其 bonus。employee 表單 bonus 表單 輸出示例 題目條件 mysql drop table ifexists bonus create table bonus empid int 11 notnull bonus int 11...
mysql 5 7 7以後需要初始化資料庫
用zip包的形式在windows上安裝了mysql 5.7.10,在啟動服務的時候,總是提示無法啟動服務,說是服務沒有報告任何錯誤。從windows的事件管理器中可以看到錯誤資訊 fatal error can t open and lock privilege tables table mysql...
JZOJ 交換 模擬
給出字串s和字串t,現在你要把s的某乙個字元和t的某乙個字元交換,使得交換之後的s至少要有三個連續相同的字元,交換之後的t也要有三個連續相同的字元。問有多少種不同的交換方式。第一行,乙個字串s。s只含有 r g b 三種字元,長度不超過50,不小於3。而且s任意兩個相鄰的字元都不相同。第二行,乙個字...