第一行乙個數字t(1≤t≤30)t(1≤t≤30)--樣例個數。每個樣例第一行三個數字n,m,k(1≤n,m≤200,0≤k≤200)n,m,k(1≤n,m≤200,0≤k≤200)。
然後這n行,每行乙個長度為m的只含'0'和'1'的字串,
保證所有樣例中∑n×m∑n×m不超過5×1055×105。
每個樣例輸出一行乙個數字--casya在這n天中最小的總上線時間示例1
22 5 1
01001
10110
2 5 0
01001
10110
58
第乙個樣例:解析:一種可行的方案:
casya第一天在第1、2、3、4個小時上線。
casya的總上線時間是1+4=5。
第二個樣例:
只能老老實實上線。
casya第一天在第2、3、4、5個小時上線;
casya第一天在第1、2、3、4個小時上線。
casya的總上線時間是4+4=8。
將該題轉化為揹包來做,
產生至多k點生氣值,求最小消耗的小時數目
計算每組產生i點生氣值的最大小時數
直接暴力迴圈計算和女神一起玩i小時需要的時間,反轉一下就是產生的生氣值的時間
然後直接簡單dp計算p以內生氣值消耗的小時,遍歷取最小值,總複雜度o(n*m*m+n*m*p)
ac:
#include#define inf 0x3f3f3f3f
#define maxn 205
using namespace std;
char str[maxn];
int cc[maxn];
int dd[maxn][maxn];//dd[i][j],i組價值j的需要的體積
int ee[maxn][maxn];//丟掉
int vc[maxn];//記錄容量
int dp[maxn][maxn];//揹包
int main()
for(int j=1;j<=m;j++)
for(int k=1;k<=m;k++)
if(cc[k]>cc[j-1])
dd[i][cc[k]-cc[j-1]]=min(dd[i][cc[k]-cc[j-1]],k-j+1);
for(int j=1;j<=m;j++)
}for(int j=0;j<=vc[i];j++)
ee[i][j]=dd[i][vc[i]-j];
}dp[0][0]=0;
for(int i=1;i<=n;i++)}}
int ans=1e9;
for(int i=0;i<=p;i++)
ans=min(ans,dp[n][i]);
printf("%d\n",ans);
}return 0;
}
簡單01揹包 完全揹包
01揹包問題 有n個重量和價值分別為wi,vi的物品。從這些物品中挑選出總重量不超過w的物品,求所有挑選方案中價值總和的最大值。1 n 100 1 wi,vi 100 1 w 10000 第一行輸入n的值 接下來n行輸入wi,vi 最後一行輸入w for example input 2 31 2 3...
揹包九講 簡單揹包
揹包問題是一種動態規劃演算法的衍生問題。它可以被看作一種獨立的題型,也可以看作是一種線性動態規劃。學好揹包 學會揹包,對於深入理解動態規劃演算法有著極大的好處,並能幫助理解一些更深層次的動態規劃問題。那麼就開始吧 題目型別 有 n 件物品和乙個容量為 v 的揹包。第 i 件物品的費體積是 v i 價...
簡單0 1揹包
第一次部落格求不噴不噴不噴!有乙個容量為v的揹包,要裝進n個物品,第i個物品的費用為ci,價值為wi,要怎樣選擇才可以使花費不超過揹包容量的同時包裡的總價值最大?每個物品只能放一次 當時剛接觸c 的我剛拿到題目就蒙逼了 如果乙個乙個列舉的話有很多種組合,想想心都累。所以就要利用動態規劃思想。什麼是動...