三个师妹之点菜
Time limit:
1000MS
Memory limit:
32768K
Total Submit: 985 Accepted: 232
Total Submit: 985 Accepted: 232
sharp有三个师妹.这个三个师妹很喜欢捉弄sharp.一天sharp请她们三个去东裕吃川菜去了.她们仨点菜 ,当然她们这次不会放过sharp的,而且她们知道sharp这次身上带了1024元钱,所以她们决定点尽量多的 菜,让sharp付尽量多的钱,当然每道菜她们只点一次,而且她们点的菜钱总和不会大于1024元,因为超出 了sharp付钱的时候发现不够会叫她们三个付多出来的部分的.
第一行输入一个N,下面有N种情况(1< N < 16). 每种情况的第一个行为M,代表有多少种川菜.接下来的M行是每一种川菜的价格.价格都是整数(1<= M <= 128),并且价格不会大于1024的. sharp身上永远只带1024元钱.
输出共N行. 每行输出sharp最多要付多少钱.
Sample Input
2 2 256 44 3 512 400 400
Sample Output
300 912
简单的背包题,但也是我第一次写背包的题。要继续努力,从简单开始!
AC code:
#include<stdio.h>#include<string.h>int main(){int i,j,n,d,m,money[1025];
while(scanf("%d",&n)==1)
{
while(n--)
{
memset(money,0,sizeof(money));
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%d",&d);
for(j=1024;j>=d;j--)
if(money[j-d]+d>money[j])//状态转移条件,判断加入这么多钱后是否大于不加入.
money[j]=money[j-d]+d;
}
printf("%d\n",money[1024]);
}
}
return 0;
}