#include
#include
#include
using
namespace
std;//#includeusing namespace std;為了呼叫庫函式max
int dp[3000005];//最多三十張每張最多1000,因為小數點後兩位再乘100
int main()
;//0不用設定三個數來分別儲存a類b類c類的總額
int flag=1;//1符合規則放進新揹包陣列,不符合去掉
for(j=1;j<=m;j++)
if(a[1]>60000||a[2]>60000||a[3]>60000)//某型別不符合去掉該發票
if(a[1]+a[2]+a[3]>100000)//總額不符合,去掉該發票
}if(flag)
sum[k++]=a[1]+a[2]+a[3];//設定新揹包
}memset(dp,0,sizeof(dp));//注意設定
dp[0]=0;//好習慣
for(i=1;i<=k-1;i++)//k++比實際多1
for(j=q;j>=sum[i];j--)
dp[j]=max(dp[j],dp[j-sum[i]]+sum[i]);//該題目只給了錢的總數,所以sum[i]既是01揹包中物品的價值,也是01揹包的物品的體積
printf("%.2lf\n",(double)dp[q]/100);//型別轉換
}return
0;}
最大報銷額 HDU 1864 01揹包
現有一筆經費可以報銷一定額度的發票。允許報銷的發票型別包括買圖書 a類 文具 b類 差旅 c類 要求每張發票的總額不得超過1000元,每張發票上,單項物品的價值不得超過600元。現請你編寫程式,在給出的一堆發票中找出可以報銷的 不超過給定額度的最大報銷額。input 測試輸入包含若干測試用例。每個測...
HDU 2955 Robberies 小數揹包
參考資料 題意 乙個人要去搶銀行,給定n個銀行各自的總存款和此人在這個銀行被抓的概率,求被抓概率小於p的情況下搶錢數的最大值。這裡可以轉化為0 1揹包問題。要點 1.概率給的是被抓概率,需要轉化為不被抓的概率。用1 p i 2.揹包容量不能是概率 小數 揹包容量應該為錢數總和。3.限制條件之間關係為...
hdu2546 01揹包 重學揹包
題意 給出菜的價錢和自己的餘額。使自己餘額最少,注意餘額大於5的情況可以買任意的菜。思路 小於5的餘額不能買菜,直接輸出,大於五的餘額,留下5元買最貴的菜,剩下的餘額進行01揹包,將剩下的餘額減去01揹包消耗金額最大。就得出答案 include includeusing namespace std ...