A - 小彭玉的扫荡食堂计划
生活随笔
收集整理的這篇文章主要介紹了
A - 小彭玉的扫荡食堂计划
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
A?-?小彭玉的掃蕩食堂計(jì)劃
Time Limit:?20000/10000MS (Java/Others)????Memory Limit:?128000/64000KB (Java/Others) Submit?StatusProblem Description
嘩啦啦村的食堂很奇怪,就是如果這個(gè)飯卡所剩金額低于5元的話,這個(gè)飯卡就不能刷了。
也就是說,只要這個(gè)飯卡金額大于等于5元,就可以隨便刷~
?
有一天,小彭玉看了看嘩啦啦食堂的飯,“哇,好好吃!我要全部都買下來!”
但是小彭玉并沒有那么多錢,于是他準(zhǔn)備充分利用自己的錢,去買這些食物!
請(qǐng)問最后小彭玉的飯卡余額最少能到多少?
Input
多組測試數(shù)據(jù)(最多100組)
第一行 n,表示有n個(gè)菜
第二行 接下來n個(gè)數(shù)字,a[i]表示第i道菜多少錢
第三行 一個(gè)數(shù)m,表示小彭玉的飯卡,一開始有m元
1<=n<=1000,1<=a[i]<=10000,1<=m<=10000
Output
輸出一個(gè)整數(shù),表示最后飯卡顯示的金額數(shù)Sample Input
1 10000 6 10 1 2 3 2 1 1 2 3 2 1 50Sample Output
-9994 32解法:01背包的使用,因?yàn)?塊錢可以買任何東西,所以,我們把價(jià)格最貴的菜獨(dú)自拿出來,我們只需要用(N-1)份菜去查找價(jià)錢容量為(M-5),所能夠買到的最大值。最后在減去價(jià)格最大的那份菜的價(jià)格即可。 1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 #include<algorithm> 5 using namespace std; 6 #define MAX 10100 7 int DP[MAX]; 8 int val[MAX]; 9 int main() 10 { 11 int N,M,i,j,Max; 12 while(scanf("%d",&N)!=EOF) 13 { 14 for(i=0,Max=0;i<N;i++) 15 { 16 scanf("%d",&val[i]); 17 if(val[i]>Max)Max=val[i];/*取最大值*/ 18 } 19 scanf("%d",&M); 20 for(i=0;i<=M;i++)DP[i]=0; 21 if(M<5||N==0){printf("%d\n",M);continue;} 22 else 23 { 24 int sign=1; 25 for(i=0;i<N;i++) 26 { 27 if(sign&&val[i]==Max)/*去除一次最大值*/ 28 {sign=0;continue;} 29 for(j=M-5;j>=val[i];j--) 30 { 31 if(DP[j]<DP[j-val[i]]+val[i]) 32 { 33 DP[j]=DP[j-val[i]]+val[i]; 34 } 35 } 36 } 37 printf("%d\n",M-DP[M-5]-Max); 38 } 39 } 40 return 0; 41 } View Code
?
轉(zhuǎn)載于:https://www.cnblogs.com/Wurq/p/4574064.html
總結(jié)
以上是生活随笔為你收集整理的A - 小彭玉的扫荡食堂计划的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多项式ADT
- 下一篇: python计算图形面积的方法_Pyth