hdu 2602
2014-04-27 20:51
232 查看
#include<stdio.h>
#include<string.h>
int max(int i,int j)
{
return i>j?i:j;
}
int a[1006][1006];
int a1[1006],a2[1006];
int main()
{
int n,m;
int k,p;
int i,j,x,y,z;
scanf("%d",&n);
while(n--)
{
memset(a,0,sizeof(a));
scanf("%d%d",&k,&p);
for(i=1;i<=k;i++)
scanf("%d",&a1[i]);
for(i=1;i<=k;i++)
scanf("%d",&a2[i]);
for(i=1;i<=k;i++)
{
for(j=1;j<=p;j++)
{
if(j<a2[i])
a[i][j]=a[i-1][j];
else
a[i][j]=max(a[i-1][j],a[i-1][j-a2[i]]+a1[i]);
}
}
printf("%d\n",a[k][p]);
}
return 0;
}
状态转移方程a[i][j]=max(a[i-1][j],a[i-1][j-a2[i]]+a1[i]);
#include<string.h>
int max(int i,int j)
{
return i>j?i:j;
}
int a[1006][1006];
int a1[1006],a2[1006];
int main()
{
int n,m;
int k,p;
int i,j,x,y,z;
scanf("%d",&n);
while(n--)
{
memset(a,0,sizeof(a));
scanf("%d%d",&k,&p);
for(i=1;i<=k;i++)
scanf("%d",&a1[i]);
for(i=1;i<=k;i++)
scanf("%d",&a2[i]);
for(i=1;i<=k;i++)
{
for(j=1;j<=p;j++)
{
if(j<a2[i])
a[i][j]=a[i-1][j];
else
a[i][j]=max(a[i-1][j],a[i-1][j-a2[i]]+a1[i]);
}
}
printf("%d\n",a[k][p]);
}
return 0;
}
状态转移方程a[i][j]=max(a[i-1][j],a[i-1][j-a2[i]]+a1[i]);
相关文章推荐
- C/C++的堆栈,内存分配
- C#之委托与事件
- maven构建ssh工程
- Android-使用Matrix对Bitmap进行处理
- Error: Could not stat() command file '/usr/local/nagios/var/rw/nagios.cmd'!
- ZOJ-2740
- 防守阵地 I
- 关于创业者-或高或低-开个小吃店也是创业-在于你自己
- 自己做网站(二) 20块钱搞定一个企业站:域名&空间申请
- c++ 字符类型总结区别wchar_t,char,WCHAR
- mongodb 第二章操作
- checking for SSL headers... configure: error: Cannot find ssl headers
- Lesson_for_java_day16--java中的异常和IO流(File类、字节流、字符流、指定编码格式)
- CSU 1411: Longest Consecutive Ones
- SpringMVC中文乱码问题
- 12个有趣的c语言面试题
- SSD上安装win7
- C读写配置文件
- C读写配置文件
- 操作系统内存管理之 内部碎片vs外部碎片