3481:练86.2 采药问题
练86.2 采药问题
1932:【05NOIP普及组】采药
1290:采药
采药(信息学奥赛一本通-T1290)
信息学奥赛 1290-采药
【算法竞赛|好题精讲】1.采药 | 动态规划、背包 | NOIP 2005普及组
#include <bits/stdc++.h>
using namespace std;
int w[3000],c[3000],f[3000][3000],m,t;
int main()
{
cin>>t>>m;
for(int i=1;i<=m;i++) cin>>w[i]>>c[i];
for(int i=1;i<=m;i++){
for(int j=t;j>0;j--){
if(w[i]<=j) f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+c[i]);
else f[i][j]=f[i-1][j];
}
}
cout<<f[m][t];
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int M = 1001;
int val[M], time_cost[M]; //存储给定草药的价值和花费时间
int f[M][M]; //第一维坐标表示对于第i个草药的取舍,第二维坐标表示所花费时间
//经典01背包,然而我只会用二维矩阵,令人感叹
int main (){
int t1me, m;
while (~ scanf ("%d %d", &t1me, &m)){
for (int i = 1; i <= m; ++ i) scanf ("%d %d", &time_cost[i], &val[i]);
for (int i = 1; i <= m; ++ i){
for (int j = 1; j <= t1me; ++ j){
f[i][j] = f[i - 1][j]; //首先默认舍去第i个草药
if (j >= time_cost[i]){ // 如果当前时间不够采集第i个草药则跳过
f[i][j] = max(f[i][j], f[i - 1][j - time_cost[i]] + val[i]);
//在时间为j,考虑前i个草药的条件下,最大的值为f[i][j]
}
}
}
cout << f[m][t1me] << endl;
}
return 0;
}
#include<cstdio>
#include <bits/stdc++.h>
using namespace std;
const int maxm = 2001, maxn = 3001;
int m, n;
int w[maxn], c[maxn];
int f[maxn][maxm];
//求x和y最大值
int max(int x,int y) { return x>y?x:y;}
int main( void )
{
//freopen("a.in","r",stdin);
//freopen("b.out","w",stdout);栈
//背包容量m和物品数量n
scanf("%d%d",&m, &n);
//在初始化循环变量部分,定义一个变量并初始化
for (int i = 1; i <= n; i++)
//每个物品的重量和价值
scanf("%d%d",&w[i],&c[i]);
memset(f,0,sizeof(f));//快
// f[i][v]表示前i件物品,总重量不超过v的最优价值
for (int i = 1; i <= n; i++)
{
for (int v =0; v <=m ; v++)
{
if ( w[i] <= v )
{
f[i][v] = max(f[i-1][v],f[i-1][v-w[i]]+c[i]);
//cout<<"01 f["<<i<<"]["<<v<<"]="<<f[i][v]<<" f["<<i-1<<"]["<<v<<"]="<<f[i-1][v]<<" f["<<i-1<<"]["<<v-w[i]<<"]="<<f[i-1][v-w[i]]<<" c["<<i<<"]="<<c[i]<<endl;
}
else //w[i]>v肯定第i个物品放不到背包里
{
f[i][v] = f[i-1][v];
//cout<<"02 f["<<i<<"]["<<v<<"]="<<f[i][v]<<endl;
}
}
//cout<<"------------------------------------"<<endl;
}
// f[n][m]为最优解
printf("%d",f[n][m]);
//fclose(stdin);
//fclose(stdout);
return 0;
}
/*
使用二维数组存储各子问题时方便,但当maxm较大时,
如maxm=2000时不能定义二维数组f,怎么办,
其实可以用一维数组。
10 4 m,n
2 1 w[i] c[i]
3 3
4 5
7 9
*/
python算法
信息技术学考一本通(python)
信息技术学考一本通(python)1036:【例4.1】输出连续10个数(浙版)
信息技术学考一本通(python)1036:【例4.1】输出连续10个数(浙版)_信息技术学考python一本通-CSDN博客
信息技术学考一本通(python)-1062:练4.13 水仙花数
Python信息技术学考一本通题目讲解、python入门、python习题集整理汇总等
Python信息技术学考一本通题目讲解、python入门、python习题集整理汇总等_信息学奥赛一本通python网站-CSDN博客