[nbut 1086]Miku调教

题目链接: http://acm.nbut.cn/Problem/view.xhtml?id=1086
这道题可以用01背包来做,其中输入的时间就是背包的容量,这里物品的价值与重量相等。
dp方程:dp[j]= max(dp[j],dp[j-value[i]]+value[i]);
代码如下:

#include<stdio.h>
#include<string.h>
int dp[50005];
int max(int x,int y)
{
return x>y?x:y;
}
int main()
{
int h,m,s,value[505];
while(~scanf("%d:%d:%d",&h,&m,&s))
{
memset(dp,0,sizeof(dp));
int time = h*3600+m*60+s;
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&value[i]);
for(int i=1;i<=n;i++)
for(int j=time;j>=value[i];j--)
dp[j]= max(dp[j],dp[j-value[i]]+value[i]);
printf("%d\n",dp[time]);
}
return 0;
}



黑赵晓,我们特专业~

你可能感兴趣的:([nbut 1086]Miku调教)