目录
第一题
总分数最大
题目描述
每位同学都有自己的一个幸运数,乐乐所在班级共有n位同学,因此有编号为1至n的n块标牌,标牌的编号与自己的幸运数相乘,就是这位同学的分数。你的工作就是帮乐乐寻找一种方案,使得班级总分数最大。
输入描述
每位同学都有自己的一个幸运数,乐乐所在班级共有n位同学,因此有编号为1至n的n块标牌,标牌的编号与自己的幸运数相乘,就是这位同学的分数。你的工作就是帮乐乐寻找一种方案,使得班级总分数最大。
输出描述
只有一行且只有一个整数,乐乐班级的总分数。
题解
#include<stdio.h>
int main()
{
int a[10005];
long long t=0;
int n,i,j,x;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(a[i]<a[j]){
x=a[i];
a[i]=a[j];
a[j]=x;
}
}
}
for(i=0;i<n;i++)
{
t+=a[i]*(i+1);
}
printf("%lld",t);
return 0;
}
第二题
动态规划-硬币重量最轻问题
题目描述
设有n种不同面值的硬币,第i种硬币的币值是Vi(其中V1=1),重量是Wi,i=1,2,...n且现在购买某种总币值为y的商品,需要用这些硬币付款,如果每种钱币使用的个数不限,那么如何选择付款的方法使得付出钱币的总重量最轻?使用动态规划设计策略设计一个求解该问题的算法。
输入描述
假设问题的输入实例是:
V1=1, V2=4, V3=6, V4=8
W1=1, W2=2,W3=4,W4=6
Y=12
输出描述
要求输出优化函数表和标记函数表、以及硬币支付方式。
题解
#include <stdio.h>
void strcpy(int *a, int *b, int Y)
{
for (int i = 0; i <= Y; i++)
*(a + i) = *(b + i);
}
void solve()
{
int n;