我正在编写一个编程课程的问题,我在开发算法以解决问题时遇到了麻烦.这里是:
你要去长途旅行.你开始在0英里处的路上.沿途有n个酒店,在英里的位置a1 <a2 <... <an,其中每个ai都是从起点开始测量的.您可以停止的唯一地点是这些酒店,但您可以选择您停在哪家酒店.您必须在最终的酒店(距离a)停留,这是您的目的地.理想情况下,您希望每天行驶200英里,但这可能无法实现(取决于酒店的间距).如果您在一天内行驶x英里,则当天的罚款为(200 - x)^ 2.您希望计划行程,以便将每日罚款的总罚款(即所有旅行天数的总和)降至最低.提供一种有效的算法,确定要停止的酒店的最佳顺序.
所以,我的直觉告诉我从后面开始,检查惩罚值,然后以某种方式匹配它们返回前进方向(导致O(n ^ 2)运行时,这对于情况是最佳的).
任何人都可以看到任何可能的方法来使这个想法成为现实或对可能的实施有任何想法?
我在C中制作一个id3标签编辑器.我无法弄清楚如何从二进制文件末尾拉出最后128个字节,以便操作/打印出id3标签所在的区域.下面是一些代码:
struct Tag{
char tagMark[3];
char trackName[30];
char artistName[30];
char albumName[30];
char year[4];
char comment[30];
char genre;
};
int main(int argc, char *argv[]){
struct Tag fileTag;
FILE *fp;
fp=fopen(argv[0], "r+b");
if(!fp){
printf("ERROR: File does not exist.");
}
int bufLength=129;
fseek(fp, 0, SEEK_END);
long fileLength=ftell(fp);
fseek(fp, fileLength-bufLength+1, SEEK_SET);
fread(&fileTag, sizeof(fileTag), 1, fp);
printf("%s\n", fileTag.tagMark);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用一个文件来测试它,其中包含一个格式正确的id3标记.在id3标记中,前三个字节分别包含"T","A"和"G",以便识别标记是否存在.有人知道为什么当我运行这个程序时,"_main"是打印出来的唯一东西吗?